2012-11-25 1 views
5

Wie kann ich den "Items" Klasse Teil auf diesem JSON-String deserialisieren:Json.NET: Deserialisieren Nested Json

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

Die ursprüngliche Klasse, die ich habe, ist:

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

Aber die obere Teil json ist ziemlich nutzlos für mich und ich mag diese Klasse verwenden, anstatt:

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

Antwort

3

ich bin mir nicht bewusst, aus der Box Lösung, wenn überhaupt, aber was Sie hält von wenigen Zeilen Code schreiben zu ähnlich unten gezeigt, um die neue Kollektion zu bauen:

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

Ich mag diesen Ansatz, aber wäre dies nicht notwendig, um dies in den Custom Converter l ogic? – keyr

0

ein, in dem man kann Schleife durch die Eigenschaft und deren Wert und erstellen Sie das gewünschte Objekt erstellen JsonConverter. Weitere Informationen finden Sie unter Suche im Stackoverflow für JsonConverter, z. http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver. Ich mochte auch den Ansatz von Jaroslaw

0

Sie diesen Code verwenden können:

dynamic dictionary = 
(JsonConvert.DeserializeObject <IDictionary<string, object> > (jsonstring))["Buddies"]; 

      var response = dictionary.items; 

      foreach (var item in response) 
      { 

       var firstName= item.firstName; 

      } 

Sie können auch sehen: Parsing a complex JSON result with C#

5

Hier ist ein Ansatz JSONPath verwendet wird, ist in einer Variablen Ihre JSON vorausgesetzt namens json :

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