我有一个 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)
但在这里我只得到一级属性。
使用 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)