10

JSON.NET を使用して C# でこの 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 の子の値にアクセスできません。

4

1 に答える 1

12

これはうまくいくはずです。

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

さらに、dynamicキーワードを使用すると、コードが読みやすくなります。

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);
}
于 2012-07-12T07:37:32.600 に答える