使用LINQ在JSON中子对象数组中搜索值
本文关键字:数组 搜索 对象 JSON 使用 LINQ | 更新日期: 2023-09-27 18:27:42
这是我的JSON:
[
{
"Assignees": [
{
"ID": "1111",
"IsPrimaryOffice": true
},
{
"ID": "2222",
"IsPrimaryOffice": false
}
],
"Height": "76",
"Width": "78",
"Top": "160",
"Left": "99.5"
},
{
"Assignees": [
{
"ID": "3333",
"IsPrimaryOffice": true
},
{
"ID": "4444",
"IsPrimaryOffice": false
}
],
"Height": "11",
"Width": "11",
"Top": "11",
"Left": "11"
},
{
"Assignees": null,
"Height": "22",
"Width": "22",
"Top": "22",
"Left": "22"
},
]
其中,我的数组中的每个主对象都包含一个子对象数组"Assignees
"。
因此,我要做的是在其数组中的每个"Assignees
"对象中搜索ID
上的匹配项。
例如:我想找到Assignee
对象,该对象的ID
为"33333",并且对于带有LINQ的IsPrimaryOffice
,其值也为true。我该怎么做?这是我想到的,但它总是返回null:
mainObject.Where(x =>
x.Assignees != null &&
x.Assignees.Any(y => y.ID == "3333" && y.IsPrimaryOffice == true))
.FirstOrDefault();
有人能帮我吗?提前感谢
我已经使用json2sharp为提供的json:创建了类
var jsonArray = "[{'"Assignees'":[{'"ID'": '"1111'",'"IsPrimaryOffice'": true },
{'"ID'": '"2222'",'"IsPrimaryOffice'": false } ],
'"Height'": '"76'", '"Width'": '"78'", '"Top'": '"160'", '"Left'": '"99.5'" },
{ '"Assignees'": [ {'"ID'": '"3333'",'"IsPrimaryOffice'": true },
{'"ID'": '"4444'",'"IsPrimaryOffice'": false } ],
'"Height'": '"11'", '"Width'": '"11'", '"Top'": '"11'", '"Left'": '"11'" }]";
生成为:
public class Assignee
{
public string ID { get; set; }
public bool IsPrimaryOffice { get; set; }
}
public class RootObject
{
public List<Assignee> Assignees { get; set; }
public string Height { get; set; }
public string Width { get; set; }
public string Top { get; set; }
public string Left { get; set; }
}
现在,当我运行以下查询时
var rootObj = JsonConvert.DeserializeObject<JArray>(jsonArray).ToObject<List<RootObject>>().Where(x =>
x.Assignees != null &&
x.Assignees.Any(y => y.ID == "3333" && y.IsPrimaryOffice == true))
.FirstOrDefault();
foreach (var assignee in rootObj.Assignees)
{
Console.WriteLine("ID = " + assignee.ID);
Console.WriteLine("IsPrimaryOffice = " + assignee.IsPrimaryOffice);
}
然后得到的输出
ID=3333
IsPrimaryOffice=真
ID=4444
IsPrimaryOffice=错误