Automapper - сопоставить пользовательский объект, вложенный в список объектов
Мне нужно на карту List<Source>
в List<Dest>
, Проблема в том, что источник содержит NestedObject
внутри него & Dest также содержит NestedObject
внутри него. Мне нужно сопоставить эти два также во время составления моего Списка. Я перепробовал все, но вложенный объект всегда остается null
и не отображается или я получаю следующее исключение:
Отсутствует конфигурация карты типов или неподдерживаемое отображение. Типы картографирования:.....
Структура источника и назначения:
Источник:
public class Source {
public string Prop1 { get; set; }
public CustomObjectSource NestedProp{ get; set; }
}
public class CustomObjectSource {
public string Key { get; set; }
public string Value{ get; set; }
}
Место назначения:
public class Destination {
public string Prop1 { get; set; }
public CustomObjectDest NestedProp{ get; set; }
}
public class CustomObjectDest {
public string Key { get; set; }
public string Value{ get; set; }
}
Что я пробовал: у меня есть следующий код, пробовал также несколько других подходов, но безрезультатно:
var config = new MapperConfiguration(c =>
{
c.CreateMap<Source, Destination>()
.AfterMap((Src, Dest) => Dest.NestedProp = new Dest.NestedProp
{
Key = Src.NestedProp.Key,
Value = Src.NestedProp.Value
});
});
var mapper = config.CreateMapper();
var destinations = mapper.Map<List<Source>, List<Destination>>(MySourceList.ToList());
Я застрял с этим в течение нескольких дней, пожалуйста, помогите.
1 ответ
Вы также должны сопоставить CustomObjectSource с CustomObjectDest.
Это должно сделать это:
var config = new MapperConfiguration(c =>
{
c.CreateMap<CustomObjectSource, CustomObjectDest>();
c.CreateMap<Source, Destination>()
.AfterMap((Src, Dest) => Dest.NestedProp = new CustomObjectDest
{
Key = Src.NestedProp.Key,
Value = Src.NestedProp.Value
});
});
var mapper = config.CreateMapper();
var MySourceList = new List<Source>
{
new Source
{
Prop1 = "prop1",
NestedProp = new CustomObjectSource()
{
Key = "key",
Value = "val"
}
}
};
var destinations = mapper.Map<List<Source>, List<Destination>>(MySourceList.ToList());