2012-11-25 40 views
5

Come faccio a deserializzare il "Elementi" parte della classe in questa stringa JSON:Json.NET: deserializzazione JSON nidificati

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

La classe originale che ho è:

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

ma la parte superiore parte di jSON è abbastanza inutile per me e voglio utilizzare questa classe invece:

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

risposta

3

io non sono a conoscenza di fuori della soluzione casella se del caso, ma ciò che impedisce di scrivere poche righe di codice simile al mostrate di seguito, al fine di costruire la nuova collezione:

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

Mi piace questo approccio, ma non sarebbe necessario inserirlo nel Custom Converter l OGIC? – keyr

0

Creare un JsonConverter in cui uno può ciclo attraverso la proprietà e il suo valore e creare l'oggetto desiderato. Per ulteriori informazioni consultare la ricerca in stackoverflow per JsonConverter, ad es. http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver. Mi è piaciuto anche l'approccio di Jaroslaw

0

È possibile utilizzare questo codice:

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

      var response = dictionary.items; 

      foreach (var item in response) 
      { 

       var firstName= item.firstName; 

      } 

si può anche vedere: Parsing a complex JSON result with C#

5

Ecco un approccio usando JSONPath, supponendo che il JSON è in una variabile denominata json :

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