【问题标题】:Json.NET: Deserializing Nested JsonJson.NET:反序列化嵌套的 Json
【发布时间】:2012-11-25 12:00:41
【问题描述】:

如何反序列化这个 Json 字符串上的“Items”类部分:

{
"Buddies": {
    "count": 1,
    "items": [
        {
            "id": "5099207ee4b0cfbb6a2bd4ec",
            "firstName": "Foo",
            "lastName": "Bar",
            "image": {
                  "url": "",
                    "sizes": [
                        60,
                        120,
                        180,
                        240,
                        360
                    ],
                    "name": "myphoto.png"
                }
            }
        ]
    }
}

我原来的课程是:

public class Buddy 
{
   public IEnumerable<Item> Items { get; set; }
   public class Item {
       public string Id { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }
   }
}

但是json的上半部分对我来说没什么用,我想改用这个类:

public class Buddy 
{
       public string Id { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }       
}

【问题讨论】:

    标签: json json.net


    【解决方案1】:

    这是一种使用 JSONPath 的方法,假设您的 JSON 位于名为 json 的变量中:

    var buddies = JObject.Parse(json).SelectToken("$.Buddies.items").ToObject<Buddy[]>();
    

    【讨论】:

      【解决方案2】:

      我不知道是否有开箱即用的解决方案,但是是什么阻止了您编写类似于如下所示的几行代码来构建新集合:

      var obj = JsonConvert.DeserializeObject<dynamic>(jsonstring);
      var items = new List<Buddy>();
      foreach (var x in obj.Buddies.items)
      {
          items.Add(new Buddy
                        {
                            Id = x.id,
                            FirstName = x.firstName,
                            LastName = x.lastName
                        });
      }
      

      【讨论】:

      • 我喜欢这种方法,但这不是要把它放在自定义转换器逻辑中吗?
      【解决方案3】:

      创建一个JsonConverter,在其中可以循环访问属性及其值并创建所需的对象。有关更多信息,请参阅在 stackoverflow 中搜索 JsonConverter,例如http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver。我也喜欢 Jaroslaw 的方法

      【讨论】:

        【解决方案4】:

        您可以使用此代码:

        dynamic dictionary = 
        (JsonConvert.DeserializeObject <IDictionary<string, object> > (jsonstring) )["Buddies"];
        
                    var response = dictionary.items;
        
                    foreach (var item in response)
                    {
        
                        var firstName= item.firstName;
        
                    }
        

        您还可以看到: Parsing a complex JSON result with C#

        【讨论】:

          猜你喜欢
          • 2014-02-19
          • 2011-09-18
          • 1970-01-01
          • 2023-03-22
          • 2016-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-29
          相关资源
          最近更新 更多