2012-07-12 109 views
10

我想用JSON.NET解析C#中的這段JSON,但我不知道該如何去解決。在不知道索引的情況下在C#中解析json

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 
     },... 
    } 
} 

完整JSON:http://steamcommunity.com/id/jessecar/inventory/json/440/2/?trading=1

我需要得到每個「rgInventory」孩子的元素,但我不能讓一個類,因爲該項目名稱是始終改變。

我試過使用這段代碼,但我總是得到一個異常。

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 
} 

例外:

未處理的異常:System.InvalidOperationException:無法訪問Newtonsoft.Json.Linq.JProperty孩子值。

回答

12

這應該有效。

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

此外,使用dynamic關鍵字可以使你的代碼更readible:

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

完美工作,謝謝! – Jessecar 2012-07-12 08:00:55