Automapper, кажется, игнорирует внуковые объекты при отображении между объектами. Так что я получаю только 2 уровня рекурсии. Мне нужно как минимум 3, в идеале n уровней.
Как заставить Automapper возвращать правильный объект со всеми неповрежденными детьми?
Я могу обойти его, сериализация моего DbPOCO и десериализация в Dto, но это означает пересечение проблем в моем приложении и / или выполнение чего-то другого для этого специфического c метода, который мне не нравится.
Учитывая мою базу данных Poco
public class Menu : SqlTable, IParentChild<Menu>
{
public string Label {get; set;}
public string Route {get; set;}
public float Sequence { get; set; }
public int? ParentID {get; set;}
public Menu Parent {get; set;}
public IList<Menu> Children { get; set; }
}
, я могу вернуть (с некоторыми рекурсивными волхвами c) объект, который сериализуется подобным образом, но включает (удаленные) столбцы аудита базы данных и другую таблицу общие c элементы, которые я не хочу передавать через мой API.
[
{
"Label": "Main Menu 1",
"Route": "",
"Sequence": 1,
"ParentID": null,
"Parent": null,
"Children": [
{
"Label": "Menu 1 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 1,
"Parent": null,
"Children": [
{
"Label": "Menu 1 Sub 1 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 2,
"Parent": null,
"Children": [],
...
},
{
"Label": "Menu 1 Sub 1 Sub 2",
"Route": "",
"Sequence": 2,
"ParentID": 2,
"Parent": null,
"Children": [],
...
}
],
...
},
{
"Label": "Menu 1 Sub 2",
"Route": "",
"Sequence": 2,
"ParentID": 1,
"Parent": null,
"Children": [],
"ID": 5,
...
}
],
...
},
{
"Label": "Main Menu 2",
"Route": "",
"Sequence": 2,
"ParentID": null,
"Parent": null,
"Children": [
{
"Label": "Menu 2 Sub 1",
"Route": "",
"Sequence": 1,
"ParentID": 6,
"Parent": null,
"Children": [],
...
}
],
...
}
]
Когда я передаю это в Automapper, чтобы сопоставить его со следующим DTO
public class WebApplicationMenuModel
{
public string Label { get; set; }
public string Route { get; set; }
public float Sequence { get; set; }
public IEnumerable<WebApplicationMenuModel> Children { get; set; }
}
Внуки из моего оригинального объекта установлено значение null
[
{
"Label": "Main Menu 1",
"Route": "",
"Sequence": 1,
"Children": [
{
"Label": "Menu 1 Sub 1",
"Route": "",
"Sequence": 1,
"Children": null
},
{
"Label": "Menu 1 Sub 2",
"Route": "",
"Sequence": 2,
"Children": null
}
]
},
{
"Label": "Main Menu 2",
"Route": "",
"Sequence": 2,
"Children": [
{
"Label": "Menu 2 Sub 1",
"Route": "",
"Sequence": 1,
"Children": null
}
]
}
]
Профиль карты довольно базовый c
public class MenuProfile : Profile
{
public MenuProfile()
{
CreateMap<Menu, WebApplicationMenuModel>()
.ReverseMap();
}
}