c# - 自动映射自定义通用类型 - 如何?

标签 c# generics .net-3.5 automapper

嘿伙计们,我正在使用 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/

相关文章:

.net-3.5 - 我可以使用 .NET 4 代码契约(Contract)并保持与 .NET 3.5 的兼容吗?

c# - 设计问题 - 控制数组

c# - 将变量相乘而不重写

javascript - 在 WebBrowser 的 DocumentCompleted 事件中操作 DOM 时,由于 jQuery 的 $(document).ready 导致轻微闪烁

c# - arr[0]++ 和++arr[0] 的区别

java - 使用具有字符串复杂性的 ArrayStack ADT(java)

generics - 当从一个泛型映射到另一个泛型时,为什么我必须破坏和重建泛型枚举的非泛型变体?

java - 什么是原始类型,为什么我们不应该使用它呢?

c# - 重构两千行代码xaml页面

.net - .NET 3.5 SDK 位于哪里?