#c# #.net #.net-core #automapper
#c# #.net #.net-ядро #автоматический преобразователь
Вопрос:
У меня есть таблица базы данных, которая имеет очень плоскую структуру. Ну, я хочу создать результирующий запрос в более структурированном и иерархическом формате, как только он будет возвращен объекту в dotnet. Для этого я создал несколько классов моделей, которые представляют, как я хочу организовать возвращаемые данные. Пример
Плоский объект
Public class FlatObject {
public string key1 {get; set;}
public string key2 {get; set;}
public string key3 {get; set;}
public string key4 {get; set;}
}
Результирующий объект
public class ResultObject {
public Category1 category1 {get;set;}
public Category2 category2 {get;set;}
public Category3 category3 {get;set;}
}
Пример категории
public class Category1 {
public SubCategory1 sCategory1 {get;set;}
}
Подкатегория
public class SubCategory1 {
public string key1 {get;set;}
}
Вы заметите, что в этой иерархии есть какой-то глубокий объект, и я пытаюсь сопоставить ключи от объекта falt с этими глубоко вложенными объектами. Я пробовал AutoMapper, но у меня проблемы с отображением такой глубины объекта. Есть идеи о том, как я могу этого добиться?
Комментарии:
1.Повторный поиск docs.automapper.org/en/latest/Flattening.html и docs.automapper.org/en/latest/….
2. После этого у меня возникает ощущение, что я собираюсь сопоставить отдельные свойства с их более глубоким соответствием в целевом объекте. Это проще, когда у вас есть объект глубиной всего в 1 подобъект, но у меня есть от 2 до трех подобъектов для обхода. Это кажется неэффективным.
Ответ №1:
Чтобы сгладить объект, сначала создайте отображение в обратном направлении, то есть сглаживание. Затем добавьте ReverseMap()
, и все готово:
CreateMap<ResultObject, FlatObject>()
.ForMember(
d => d.key1,
o => o.MapFrom(s => s.category1.sCategory1.key1))
.ForMember(
d => d.key2,
o => o.MapFrom(s => s.category2.sCategory2.key2))
.ForMember(
d => d.key3,
o => o.MapFrom(s => s.category3.sCategory3.key3))
.ForMember(
d => d.key4,
o => o.MapFrom(s => s.category4.sCategory4.key4))
.ReverseMap();