2012-11-25 12 views
5

मैं इस JSON स्ट्रिंग पर "आइटम" वर्ग हिस्सा deserialize कार्य करें:Json.NET: deserializing नेस्टेड 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

मुझे यह दृष्टिकोण पसंद है, लेकिन यह कस्टम कनवर्टर एल में रखने के लिए यह साफ नहीं होगा ogic? – keyr

0

संपत्ति के माध्यम से एक है, जिसमें JsonConverter एक कर सकते हैं पाश और अपने मूल्य बनाएँ और वांछित वस्तु बनाने के। अधिक जानकारी के लिए JsonConverter उदा। के लिए stackoverflow में खोज देखें http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver। मैं भी Jaroslaw

के दृष्टिकोण पसंद आया
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[]>();