2012-07-12 22 views
10

Bu JSON parçasını JSON.NET ile ayrıştırmak istiyorum, ama nasıl gideceğimi bilmiyorum.C# ayrıştırma json in # # endeksleri bilmeden

Json:

{ 
    "success":true, 
    "rgInventory":{ 
     "967633758":{ 
      "id":"967633758", 
      "classid":"23973033", 
      "instanceid":"11040671", 
      "amount":"1", 
      "pos":1 
     }, 
     "302756826":{ 
      "id":"302756826", 
      "classid":"15", 
      "instanceid":"11041143", 
      "amount":"1", 
      "pos":2 
     },... 
    } 
} 

Tam Json: http://steamcommunity.com/id/jessecar/inventory/json/440/2/?trading=1

ben her "rgInventory" çocuğun unsurlarını almak gerekir

ancak öğe adları her zaman çünkü ben bunun için bir sınıf yapamaz değiştirme.

Bu kod parçasını kullanmayı denedim, ancak her zaman bir istisna alıyorum.

dynamic jsObject = JsonConvert.DeserializeObject(jsonString); 

Console.WriteLine("Status: "+jsObject["success"]); //This works fine 

foreach(var i in jsObject["rgInventory"]){ 
    Console.WriteLine("Item ID: "+i["id"]); //This gives an exception 
} 

İstisna:

işlenmeyen özel durum: iletisi: Newtonsoft.Json.Linq.JProperty Çocuk değerini erişilemiyor. Bu iş işe yaramalıdır.

cevap

12

var jObj = (JObject)JsonConvert.DeserializeObject(json); 
foreach(var child in jObj["rgInventory"].Children()) 
{ 
    Console.WriteLine("Item ID: {0}", child.First()["id"]); 
} 

Ayrıca, kod daha Okunması yapabilirsiniz dynamic anahtar kelime kullanarak:

dynamic jObj = JsonConvert.DeserializeObject(json); 
Console.WriteLine("Status: " + jObj.success); 
foreach(var child in jObj.rgInventory.Children()) 
{ 
    Console.WriteLine("Item ID: {0}", child.First.id); 
} 
+1

Mükemmel çalıştı, teşekkürler! – Jessecar