【问题标题】:C# Using JSON.NET to get listC# 使用 JSON.NET 获取列表
【发布时间】:2014-09-14 00:47:01
【问题描述】:

假设你有一个这样的字符串:

{
    "inventory1": {
        "confirmed": 1,
        "items": [{
            "id": "42",
            "ammount": "2"
        }, {
            "id": "41",
            "ammount": "3"
        }]
    },
    "inventory2": {
        "confirmed": 1,
        "items": [{
            "id": "43",
            "ammount": "1"
        }, {
            "id": "41",
            "ammount": "2"
        }]
    }
}

如何将inventory1 中每个项目的ID 放入字符串列表中?

【问题讨论】:

  • 使用 POCO 映射并对其进行反序列化,或者使用 JObject/JArray,甚至是 dynamic - 其中有 no shortage of examples。在理解了第一个“我如何访问”之后,提取本身就相当简单了,比如使用 LINQ 甚至手动循环。无论如何,没有代码/尝试->没有问题/问题,只有一个任务。请查阅有关该主题的文档和以前的问题。

标签: c# json json.net deserialization


【解决方案1】:

试试这个:

var ids = JToken.Parse(json)
                .SelectToken("inventory1.items")
                .Select(item => item["id"].ToString())
                .ToList();

演示:https://dotnetfiddle.net/Vadl3I

【讨论】:

    【解决方案2】:

    将您的 JSON 粘贴到 json2csharp,然后在您的项目中创建建议的类。然后您可以反序列化您的 JSON 并轻松获取任何特定部分:

    var myDeserializedJson = JsonConvert.DeserializeObject<RootObject>(myJsonString);
    List<Item> result = myDeserializedJson.inventory1
                                          .items
                                          .Select(o => o.id)
                                          .ToList();
    

    或者如果您不想创建映射类,可以将其加载到JObject 并使用属性索引器获取特定的 JSON 属性:

    var result = JObject.Parse(myJsonString)["inventory1"]["items"]
                        .Select(o => o["id"].ToString())
                        .ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多