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

时间:2012-11-25 12:00:41

标签: 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"
                }
            }
        ]
    }
}

我所拥有的原始课程是:

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; }       
}

4 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用此代码:

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#