Я пытаюсь получить вложенный иерархический ответ JSON от ASP.NET webAPI, где определена плоская модель на основе таблицы SQL.
Я новичок в ASP.NET WebAPI.
У меня есть проект MVC ASP.NET, где определен класс модели сборки. Каждая сборка может быть дочерней по отношению к другой сборке с теоретически бесконечными детьми и детьми.
Класс модели сборки, связанный с таблицей SQL, определяется следующим образом:
Int Id
String Name
Int ParentId
Мне нужно выполнить Http GET, чтобы получить иерархическую структуру родитель-потомок.
Теперь у меня есть следующая функция в классе контроллера сборки:
[Route("api/Assembly/GetTree/{id}")]
[HttpGet]
public IEnumerable<Assembly> GetTree(int id)
{
var assemblies = db.Assemblies.Where(x => x.ParentId == id || x.Id == id).ToList();
var child = assemblies.AsEnumerable().Union(db.Assemblies.AsEnumerable().Where(x => x.ParentId == id).SelectMany(y => GetParent(y.Id))).ToList();
return child;
}
Проблема (я думаю) в том, что «союз» возвращает мне плоский ответ JSON.
db.Assembies является экземпляром сборки класса контекстной модели db, автоматически сгенерированной из db и определенной следующим образом:
public partial class Assembly
{
public Assembly(){}
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
}
Ожидаемый результат должен быть таким:
[
{
Id: '1',
Name: 'Assembly1',
ParentId: '0'
children: [
{
Id: '2',
Name: 'Assembly1.1',
ParentId: '1',
},
{
Id: '3',
Name: 'Assembly1.2',
ParentId: '1',
},
]
},
{
Id: '4',
Name: 'Assembly2',
ParentId: '0'
children: [
{
Id: '5',
Name: 'Assembly2.1',
ParentId: '4',
children: [
{
Id: '6',
Name: 'Assembly2.1.1',
ParentId: '5',
},
{
Id: '7',
Name: 'Assembly2.1.2',
ParentId: '5',
},
]
},
{
Id: '8',
Name: 'Assembly2.2',
ParentId: '4'
children: [
{
Id: '9',
Name: 'Assembly2.2.1',
ParentId: '8',
},
{
Id: '10',
Name: 'Assembly2.2.2',
ParentId: '8',
},
]
},
]
},
]
Как я могу поместить сборки друг в друга?