嘿伙计们,我正在使用 automapper版本1.1.0.188
在我的 AutoMapper.Configure 中,我将实体映射到 DTO,反之亦然,如下所示:
// entity >> DTO
Mapper.CreateMap<MetaTemplate, MetaTemplateDTO>();
Mapper.CreateMap<Person, PersonDTO>();
// DTO >> Entity
Mapper.CreateMap<MetaTemplateDTO, MetaTemplate>();
Mapper.CreateMap<PersonDTO, Person>();
当我执行以下映射时(反之亦然),一切正常
Mapper.Map<entity, entityDTO>(entity);
Mapper.Map<List<entity>, List<entityDTO>>(entities);
请注意,上面的自动映射器仅适用于 List<>,无需我进行任何配置。
我有一个通用容器(针对本示例进行了简化):
public class Container<T>
{
public int TotalItems{get;set;}
public IList<T> Items{get;set;}
}
现在,无需任何额外的自动映射配置,当我这样做时:
Mapper.Map<Container<entity>, Container<entityDTO>>(entityContainer);
我遇到自动映射器异常:
Missing type map configuration or unsupported mapping.Exception
但是,如果我在特定类型的自动映射配置中添加此行(如下所示),则容器映射将起作用。
Mapper.CreateMap<Container<PersonDTO>, Container<Person>>();
但是,它仅适用于该 Person/PersonDTO 类型。
这是为什么呢?如何使自动映射器识别 Container 类,因为它识别 List<>??
我不想再次为每种类型显式配置映射。
酷,干杯
最佳答案
如果您的通用容器类的行为类似于对象列表,那么您最好实现 IEnumerable 接口(interface)。然后自动映射器应该能够迭代对象并相应地映射它们。
关于c# - 自动映射自定义通用类型 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074617/