循环遍历具有嵌套对象的JSON对象,并检查布尔值c#
我有两个JSON对象,它们被反序列化为一个c#对象 JSON对象都是这样的循环遍历具有嵌套对象的JSON对象,并检查布尔值c#,c#,loops,asp.net-core,recursion,C#,Loops,Asp.net Core,Recursion,我有两个JSON对象,它们被反序列化为一个c#对象 JSON对象都是这样的 { "obj2": { "booleanVal": true, "data": "me", "foo": { "Key": "", "booleanVal": false, "dataValue": "foo" }, "Ide": { "booleanVal": true, "foo2": { "booleanVal": false,
{
"obj2": {
"booleanVal": true,
"data": "me",
"foo": {
"Key": "",
"booleanVal": false,
"dataValue": "foo"
},
"Ide": {
"booleanVal": true,
"foo2": {
"booleanVal": false,
"dataValue": "foo"
}
}
}
private void loop(obj1, obj2)
{
foreach (var p in obj1)
{
foreach (var c in obj2)
{
if (p.booleanVal != c.booleanVal)
{
Console.Error.WriteLine("illegal");
}
}
}
}
我想通过c#object obj1循环检查booleanVal以将其与obj2的booleanVal进行比较,我似乎找不到一个好方法来通过对象到达最后一个嵌套对象到达booleanVal,到目前为止我尝试的是这样的
{
"obj2": {
"booleanVal": true,
"data": "me",
"foo": {
"Key": "",
"booleanVal": false,
"dataValue": "foo"
},
"Ide": {
"booleanVal": true,
"foo2": {
"booleanVal": false,
"dataValue": "foo"
}
}
}
private void loop(obj1, obj2)
{
foreach (var p in obj1)
{
foreach (var c in obj2)
{
if (p.booleanVal != c.booleanVal)
{
Console.Error.WriteLine("illegal");
}
}
}
}
您可以使用linq。在.cs文件顶部添加以下行
using System.Linq;
有许多可能的方法可以使用linq轻松地遍历列表。下面的两个示例将告诉您如何到达最后一个嵌套对象并进行比较。也许你需要根据你的需要修改它
示例1:在每个级别分别匹配booleanVal
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal))
{
// first level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.foo.booleanVal == obj1Item.foo.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// third level booleanVal matched
}
}
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal &&
obj2Item.foo.booleanVal == obj1Item.foo.booleanVal &&
obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal &&
obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// booleanVal at all levels matched
}
}
示例2:在所有级别同时匹配布尔值
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal))
{
// first level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.foo.booleanVal == obj1Item.foo.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// third level booleanVal matched
}
}
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal &&
obj2Item.foo.booleanVal == obj1Item.foo.booleanVal &&
obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal &&
obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// booleanVal at all levels matched
}
}
您可以使用linq。在.cs文件顶部添加以下行
using System.Linq;
有许多可能的方法可以使用linq轻松地遍历列表。下面的两个示例将告诉您如何到达最后一个嵌套对象并进行比较。也许你需要根据你的需要修改它
示例1:在每个级别分别匹配booleanVal
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal))
{
// first level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.foo.booleanVal == obj1Item.foo.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// third level booleanVal matched
}
}
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal &&
obj2Item.foo.booleanVal == obj1Item.foo.booleanVal &&
obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal &&
obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// booleanVal at all levels matched
}
}
示例2:在所有级别同时匹配布尔值
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal))
{
// first level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.foo.booleanVal == obj1Item.foo.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal))
{
// second level booleanVal matched
}
if(obj2.Any(obj2Item => obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// third level booleanVal matched
}
}
foreach (var obj1Item in obj1)
{
if(obj2.Any(obj2Item => obj2Item.booleanVal == obj1Item.booleanVal &&
obj2Item.foo.booleanVal == obj1Item.foo.booleanVal &&
obj2Item.Ide.booleanVal == obj1Item.Ide.booleanVal &&
obj2Item.Ide.foo2.booleanVal == obj1Item.Ide.foo2.booleanVal))
{
// booleanVal at all levels matched
}
}
你在重复两个列表吗?添加更多关于你到底需要实现什么的细节。这是否回答了你的问题?你在重复两个列表吗?添加更多关于你到底需要实现什么的细节。这是否回答了你的问题?