在网络服务电话上,我收到以下回复
{
"132800000000040": {
"likes": 38347,
"id": "132800000000040"
},
"192011111111130": {
"likes": 44855,
"id": "192011111111130"
},
"115372222222226": {
"likes": 42227,
"id": "115372222222226"
},
"186111111111116": {
"likes": 21987,
"id": "186111111111116"
},
"30000000002": {
"likes": 18539,
"id": "30000000002"
},
"24000000006": {
"likes": 16438,
"id": "24000000006"
}
}
我创建了一个用于保存数据的类
public class LikeCount
{
public string id { get; set; }
public string likes { get; set; }
}
并尝试按如下方式解析json
var responseString = await response.Content.ReadAsStringAsync();
dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);
List<LikeCount> LikeList = (List<LikeCount>)Newtonsoft.Json.JsonConvert.DeserializeObject(obj.ToString(), typeof(List<LikeCount>));
但是得到了错误
无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Collections.Generic.List`1 [Rxz.Model .LikeCount]&#39;因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
我如何解决这个问题请帮助..
答案 0 :(得分:1)
您的JSON元素是一个对象,因为它由{ }
分隔,而不是由[ ]
分隔的数组。因此,您不能将其反序列化为List
。
您的对象具有键值对,string
是关键,而LikeCount
是值。因此,您应该将其反序列化为IDictionary<string, LikeCount>
:
IDictionary<string, LikeCount> dict = Newtonsoft.Json.JsonConvert.DeserializeObject<IDictionary<string, LikeCount>>(responseString);
如果您只需要没有密钥的LikeCount
个对象列表,则可以使用Values
属性获取它们。然后,根据您的需要,您可能需要也可能不需要通过ToList
将其转换为List
:
IDictionary<string, LikeCount> dict = Newtonsoft.Json.JsonConvert.DeserializeObject<IDictionary<string, LikeCount>>(responseString);
List<LikeCount> likes = dict.Values.ToList();