2012-11-25 21 views
5

Jak deserializować "przedmioty" class część tego łańcuch JSON:Json.NET: deserializacji Zagnieżdżony Json

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

Oryginalny klasa że mam to:

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

Ale górna część json jest całkiem bezużyteczny dla mnie i chcę, aby użyć tej klasy zamiast:

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

Odpowiedz

3

nie jestem świadomy z roztworu pole, jeśli w ogóle, ale co zatrzymuje Cię od pisania kilka linijek kodu podobnego do pokazanych poniżej, w celu stworzenia nowej kolekcji:

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

Podoba mi się to podejście, ale czy nie byłoby to w ogóle zamienić w Konwerter niestandardowy? ogic? – keyr

0

Utwórz JsonConverter w których można pętlę poprzez nieruchomości i jej wartości i stworzyć pożądany obiekt. Aby uzyskać więcej informacji, zobacz search in stackoverflow for JsonConverter np. http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver. Podobała mi się również podejście Jarosławiu

0

Można użyć tego kodu:

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

      var response = dictionary.items; 

      foreach (var item in response) 
      { 

       var firstName= item.firstName; 

      } 

można również zobaczyć: Parsing a complex JSON result with C#

5

Oto podejście używając JSONPath, zakładając, że JSON jest w zmiennej o nazwie json :

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