Json.NET:反序列化嵌套的Json

gna*_*yan 7 json json.net

如何反序列化此Json字符串上的"Items"类部分:

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

我拥有的原始课程是:

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; }
   }
}
Run Code Online (Sandbox Code Playgroud)

但是json的上半部分对我来说是无用的,我想要使用这个类:

public class Buddy 
{
       public string Id { get; set; }
       public string FirstName { get; set; }
       public string LastName { get; set; }       
}
Run Code Online (Sandbox Code Playgroud)

Zac*_*les 8

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

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


jwa*_*zko 4

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

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
                  });
}
Run Code Online (Sandbox Code Playgroud)