我正在使用RESTful JSON API,并试图使用Newtonsoft的JSON.Net框架反序列化部分JSON响应消息。Deserialise JSON响应的一部分
基本上,我接收到的回复JSON消息包括标题信息以及项目数组(卡片)。当我尝试反序列化到一张卡片列表时,抛出了.JsonSerializationException。
我几乎可以肯定,这是因为.DeserializeObject
方法正在跳过标题信息。为了测试理论,我'按摩'JSON响应消息&删除了标题信息;将剩余的JSON保存为一个字符串&将它传递给Deserialize方法,&它工作!
我的问题是 - 是有可能的参数&力将其传递的.DeserializeObject
方法ONL反序列化JSON响应的数据分量?
的代码:
public List<Cards.CardResponse> GetByUserToken(string UserToken)
{
string requestUrl = URL + "/user/" + UserToken;
HttpWebRequest request =(HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = "GET";
request.ContentType = "application/json";
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
request.Headers.Add("Authorization", "Basic " + encoded);
List<Cards.CardResponse> ReturnCards = null;
try
{
// Get JSON response message
string jsonResponse = string.Empty;
HttpWebResponse ws = (HttpWebResponse)request.GetResponse();
using (System.IO.StreamReader sreader = new System.IO.StreamReader(ws.GetResponseStream()))
{
jsonResponse = sreader.ReadToEnd();
}
// *** THE LINE BELOW THROWS THE ERROR:
ReturnCards = (List<Cards.CardResponse>)JsonConvert.DeserializeObject(jsonResponse, typeof(List<Cards.CardResponse>));**
return ReturnCards;
的错误消息:
类型 'Newtonsoft.Json.JsonSerializationException
' 的未处理的异常发生在Newtonsoft.Json.dll
其他信息:
无法反序列化当前的JSON对象(例如, {“name”:“value”}) 转换成 'System.Collections.Generic.List`1 [ExpenseWorks.Marqeta.Cards + CardResponse]' 因为该类型需要一个JSON数组(例如[1,2,3 ])正确地反序列化 。
为了解决这个错误或者改变JSON到JSON阵列(例如 [1,2,3]),或改变它的反序列化类型,以便它是一个正常的.NET 类型(例如不是原始类型像整数,而不是类似数组或列表的集合类型 ),它们可以从JSON对象反序列化。 也可以将JsonObjectAttribute添加到该类型中,以强制它从一个JSON对象反序列化为 。
的原始JSON:
我还包含了原始JSON响应 - 基本上,我想弄清楚如何只能从 '数据' 起反序列化:
{
"count": 5,
"start_index": 0,
"end_index": 4,
"is_more": true,
"data": [{
"token": "9bd70529-f84a-406e-ad68-eabf69af690f",
"pan": "******______****",
"expiration": "0219",
"state": "UNACTIVATED",
"user_token": "2dea06b1-9fc8-423c-bb5b-b733ec895b38",
"card_product_token": "dfd110cf-a833-4b21-b7c1-b3bc62b97c52",
"last_four": "7281",
"pin_is_set": false,
"state_reason": "New card",
"fulfillment_status": "ISSUED"
},
{
"token": "0ec53aef-768d-4499-a661-9e26172b8369",
"pan": "******______****",
"expiration": "0219",
"state": "UNACTIVATED",
"user_token": "2dea06b1-9fc8-423c-bb5b-b733ec895b38",
"card_product_token": "dfd110cf-a833-4b21-b7c1-b3bc62b97c52",
"last_four": "5216",
"pin_is_set": false,
"state_reason": "New card",
"fulfillment_status": "ISSUED"
},
{
"token": "82c8b386 -f4b6-40d9-bee6-dd0a5b74d55b",
"pan": "******______****",
"expiration": "0219",
"state": "UNACTIVATED",
"user_token": "2dea06b1-9fc8-423c-bb5b-b733ec895b38",
"card_product_token": "dfd110cf-a833-4b21-b7c1-b3bc62b97c52",
"last_four": "6640",
"pin_is_set": false,
"state_reason": "New card",
"fulfillment_status": "ISSUED"
},
{
"token": "1181f23d-b464-4af2-95d9-8b8f48c4d6a8",
"pan": "******______****",
"expiration": "0219",
"state": "UNACTIVATED",
"user_token": "2dea06b1-9fc8-423c-bb5b-b733ec895b38",
"card_product_token": "dfd110cf-a833-4b21-b7c1-b3bc62b97c52",
"last_four": "3390",
"pin_is_set": false,
"state_reason": "New card",
"fulfillment_status": "ISSUED"
},
{
"token": "21870467-b059-472e-a130-938356ff1f4a",
"pan": "******______****",
"expiration": "0219",
"state": "UNACTIVATED",
"user_token": "2dea06b1-9fc8-423c-bb5b-b733ec895b38",
"card_product_token": "dfd110cf-a833-4b21-b7c1-b3bc62b97c52",
"last_four": "7387",
"pin_is_set": false,
"state_reason": "New card",
"fulfillment_status": "ISSUED"
}]
}
这是一条评论,而不是答案。 – jgauffin 2015-02-24 12:42:12
我无法评论,对不起。另外,如果认为这是一个有效的答案。 – 2015-02-24 12:44:30
很明显,字符串中存在转义字符。如果你删除它们,它是有效的JSON。检查你自己,我在他的回答中没有转义JSON。 – jgauffin 2015-02-24 12:47:47