C#Json-从JsonArray提取值列表

时间:2020-07-15 10:44:33

标签: c# json json.net

使用此Json字符串(无法更改,因为我是从外部来源收到的)

{
  "IsValid": true,
  "Result": [
    {
      "PartNumber": "ABC",
      "Id": "x123"
    },
    {
      "PartNumber": "DEF",
      "Id": "y456"
    },
    {
      "PartNumber": "GHI",
      "Id": "z789"
    }
  ]
}

我需要的是这样的PartNumber / SupplyId的列表

"ABC", "x123"
"DEF", "y456"
"GHI", "z789"

我只是使用foreach方法来做,我的问题是:我可以使用类似的方法来做

    var props = obj.Descendants() 
         .OfType<JProperty>() .Where(p => p.Name== "PartNumber" ||  p.Name == "SupplyId") 
... and now?

谢谢

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的请求,则可以执行以下操作:

var jObj = JsonConvert.DeserializeObject<JObject>(json);
var result = jObj["Result"]
    .Children()
    .SelectMany(c => new[] { c["PartNumber"].ToString(), c["Id"].ToString()})
    .ToList()

result将包含零件号和ID的平面列表。

答案 1 :(得分:0)

您可以访问Result数组的子标记以获取PartNumberId的值,然后使用Select方法将它们映射到元组或匿名类型的列表

var result = obj["Result"]?.Children()
    .Select(t => (t["PartNumber"]?.Value<string>(), t["Id"]?.Value<string>()))
    .ToList();

var result = obj["Result"]?.Children()
    .Select(t => new { PartNumber = t["PartNumber"]?.Value<string>(), Id = t["Id"]?.Value<string>() })
    .ToList();
相关问题