Объединить два c# объекта (json) списков как родительский дочерний - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть строка json, которая выглядит следующим образом:

[
  {
     "id": 1,
    "title": "Hello"
  },
  {
    "id": 2,
    "title": "test"
  }
]


[
  {
     "id": 1,
    "parentId": 1,
    "prop1": "sdsdsdt",
    "prop1l": "3dsdsd",
    "v": "fsssd sd"
  },
   {
     "id": 2,
    "parentId": 1,
    "prop1": "sdsdsdt",
    "prop1l": "3dsdsd",
    "v": "fsssd sd"
  },
    {
     "id": 3,
    "parentId": 2,
    "prop1": "sdsdsdt",
    "prop2": "3dsdsd",
    "prop3": "fsssd sd"
  }
]

Я могу сериализовать ее в два класса (список), как показано ниже:

public class Parent
{
    public int id { get; set; }
    public string title { get; set; }
}


public class Child
{
    public int id { get; set; }
    public int parentId { get; set; }
    public string prop1 { get; set; }
    public string prop2 { get; set; }
    public string prop3 { get; set; }
}

Теперь я хочу создать третью коллекцию, где я могу объединить дочерние объекты под родительским объектом. Я знаю, что могу сделать для l oop в parent и искать потомков для parentId в Child. Интересно, есть ли лучший способ? Так что я могу получить их как список ниже:

public class Merged
{
    public int id { get; set; }
    public string title { get; set; }
    public list<Child> children{get;set;}
}

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

После сериализации ваших коллекций вы можете использовать метод LINQ GroupBy:

var parentList = new List<Parent>(); //your serialized parent list
var childList = new List<Child>(); //your serialized child list

var mergedList = parentList
    .GroupJoin(
        childList, p => p.id, ch => ch.parentId, (p, ch) => new Merged {
            id = p.id, 
            title = p.title,
            children = ch.ToList()      
        })
    .ToList();
0 голосов
/ 15 февраля 2020

Вы можете сделать это с помощью LINQ просто с помощью Select метода:

var mergedList = parentList
.Select(p=> new Merged
{
  id = p.Id, 
  title = p.title, 
  children = childList.Where(c=>c.parentId == p.id).ToList()
});

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