用Newtonsoft解析Json得到错误

时间:2016-03-09 07:20:16

标签: c# json parsing windows-phone-8

在网络服务电话上,我收到以下回复

   {
   "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])才能正确反序列化。

我如何解决这个问题请帮助..

1 个答案:

答案 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();