2012-11-25 161 views
5

我如何反序列化这个JSON字符串的“项目”类部分:Json.NET:反序列化嵌套的Json

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

回答

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

我喜欢这种方法,但不会这neet把它放在自定义转换器l逻辑? – keyr

0

创建通过属性和其中一个JsonConverter可以循环它的价值,创造所需的对象。有关更多信息,请参阅在JoverConverter的stackoverflow中搜索,例如http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver。我也喜欢雅罗斯瓦夫

的方法
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#

5

下面是一个使用JSONPath的方法,假设你的JSON是在一个名为json变量:

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