От L oop до JSON объекта, который имеет вложенные объекты и проверяет логические значения c# - PullRequest
1 голос
/ 05 марта 2020

У меня есть 2 JSON объектов, которые десериализованы в c# объект

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

Я хочу, чтобы l oop через объект c# obj1 проверьте booleanVal, чтобы сравнить его с логическим значением obj2. Кажется, я не могу найти хороший путь к go через объект к последнему вложенному объекту для достижения логического значения, что я до сих пор пробовал что-то вроде этого

private void loop(obj1, obj2)
{
  foreach (var p in obj1)
            {
                foreach (var c in obj2)
                {

                    if (p.booleanVal != c.booleanVal)
                    {
                        Console.Error.WriteLine("illegal");
                    }
                }
            }
}

1 Ответ

0 голосов
/ 05 марта 2020

Вы можете использовать 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
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...