Разбор json в С# без знания индексов
Я хочу проанализировать этот фрагмент JSON в С# с помощью JSON.NET, но я не знаю, как это сделать.
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.
Ответы
Ответ 1
Это должно работать.
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);
}