【问题标题】:Parsing Json with Newtonsoft getting error使用 Newtonsoft 解析 Json 时出错
【发布时间】:2016-03-09 07:20:16
【问题描述】:

在网络服务调用中,我得到以下响应

   {
   "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 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[Rxz.Model.LikeCount]' 因为该类型需要 JSON 数组(例如[1,2,3]) 正确反序列化。

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

【问题讨论】:

  • 这不是收藏。集合由[] 分隔。然而你正试图反序列化成一个集合

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


【解决方案1】:

您的 JSON 元素是一个对象,因为它由 { } 分隔,而不是由 [ ] 分隔的数组。所以你不能只是将它反序列化为List

您的对象有键值对,string 是键,LikeCount 是值。因此,您应该将其反序列化为IDictionary&lt;string, LikeCount&gt;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多