2012-07-12 4 views
10

Je veux analyser cette partie de JSON en C# avec JSON.NET, mais je ne sais pas comment faire.Analyser json en C# sans connaître les index

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

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

Je dois obtenir les éléments de chaque enfant de « rgInventory », mais je ne peux pas faire une classe pour elle parce que les noms des éléments sont toujours en changeant.

J'ai essayé d'utiliser ce morceau de code, mais j'ai toujours une exception.

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 
} 

Exception:

Exception non gérée: System.InvalidOperationException: ne peut pas accéder à la valeur de l'enfant sur Newtonsoft.Json.Linq.JProperty.

Répondre

12

Cela devrait fonctionner.

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

De plus, en utilisant le mot dynamic peut rendre votre code plus 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

ont parfaitement fonctionné, Merci! – Jessecar

Questions connexes