如何使用 C# 通过 Json 中的键名获取值列表

KBN*_*nda 6 c# json json.net

我有一个 Json 文件如下

{
  "objectId": "123",
  "properties": {
    "objectId": "456"
  },
  "variables": [
    {
      "objectId": "789"
    },
    {
      "objectId": "012"
    }
  ]

}
Run Code Online (Sandbox Code Playgroud)

我想在列表中获取所有“objectId”,例如 [ "123", "456", "789", "012" ]

我试过如下

var body = JObject.Parse(jsonString); //using Newtonsoft library
var list = body.Properties().Where(p => p.Name == "objectId").Select(p => p.Value).ToList();
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下方式

var list = new List<string>();
            foreach(var prop in body.Properties())
            {
                if(prop.Name == "objectId")
                {
                    list.Add(prop.Value.ToString());
                }
            }
Run Code Online (Sandbox Code Playgroud)

但在这里我只得到一级属性。

Pet*_*-Yu 5

使用 DescendantsAndSelf().OfType() 获取所有 JProperties,然后使用 LINQ 进行过滤。

var root = (JContainer)JToken.Parse(json);
            var list = root.DescendantsAndSelf().OfType<JProperty>().Where(p => p.Name == "objectId").Select(p => p.Value.Value<string>());
            Console.WriteLine(string.Join(",", list.ToArray()));
Run Code Online (Sandbox Code Playgroud)