【问题标题】:Loop through a JSON object that has nested objects and check boolean values c#循环遍历具有嵌套对象的 JSON 对象并检查布尔值 c#
【发布时间】:2020-06-18 00:31:01
【问题描述】:

我有 2 个反序列化为 c# 对象的 JSON 对象

JSON 对象都像这样

{
"obj2": {
  "booleanVal": true,
  "data": "me",
  "foo": {
    "Key": "",
    "booleanVal": false,
    "dataValue": "foo"
  },
  "Ide": {
    "booleanVal": true,
    "foo2": {
        "booleanVal": false,
        "dataValue": "foo"
      }
   }
}
{
"obj1": {
  "booleanVal": true,
  "data": "me",
  "foo": {
    "Key": "",
    "booleanVal": false,
    "dataValue": "foo"
  },
  "Ide": {
    "booleanVal": true,
    "foo2": {
        "booleanVal": false,
        "dataValue": "foo"
      }
   }
}

我想循环遍历 c# 对象 obj1 检查 booleanVal 以将其与 obj2 的 booleanval 进行比较,我似乎想不出一个好方法来遍历对象到最后一个嵌套对象到达 booleanVal,我是什么到目前为止尝试过是这样的

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# loops asp.net-core recursion


【解决方案1】:

您可以使用 linq。
在 .cs 文件顶部添加以下行。

using System.Linq;

有许多可能的方法可以轻松地使用 linq 遍历列表。下面的 2 个示例将让您了解如何到达最后一个嵌套对象并进行比较。也许您需要根据需要对其进行修改。

示例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
    }

}

示例2:同时匹配所有级别的booleanVal

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2015-11-17
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多