Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环遍历具有嵌套对象的JSON对象,并检查布尔值c#_C#_Loops_Asp.net Core_Recursion - Fatal编程技术网

循环遍历具有嵌套对象的JSON对象,并检查布尔值c#

循环遍历具有嵌套对象的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,

我有两个JSON对象,它们被反序列化为一个c#对象

JSON对象都是这样的

{
"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
    }
}


你在重复两个列表吗?添加更多关于你到底需要实现什么的细节。这是否回答了你的问题?你在重复两个列表吗?添加更多关于你到底需要实现什么的细节。这是否回答了你的问题?