【问题标题】:Parsing json in C# without knowing indexes在不知道索引的情况下在 C# 中解析 json
【发布时间】:2012-07-12 07:31:17
【问题描述】:

我想用 JSON.NET 在 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 上的子值。

【问题讨论】:

    标签: c# .net json mono json.net


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多