AutoMapper 5. 集合类型之间的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AutoMapper 5. 集合类型之间的转换相关的知识,希望对你有一定的参考价值。

参考技术A 集合的映射和类的映射差别不大.
AutoMapper提供了如下集合类型之间的映射.
IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
IList
IList<T>
List<T>
Arrays

测试如下

可以看到不论是什么集合类型都能被成功映射

AutoMapper 可以在值类型(枚举)和引用类型之间进行映射吗? (细绳)

【中文标题】AutoMapper 可以在值类型(枚举)和引用类型之间进行映射吗? (细绳)【英文标题】:Can AutoMapper Map Between a Value Type (Enum) and Reference Type? (string) 【发布时间】:2011-08-03 15:13:51 【问题描述】:

奇怪的问题 - 我正在尝试使用 AutoMapper 在 enumstring 之间进行映射:

Mapper.CreateMap<MyEnum, string>()
   .ForMember(dest => dest, opt => opt.MapFrom(src => src.ToString()));

不用担心我在使用 .ToString(),实际上我在枚举本身上使用了扩展方法 (.ToDescription()),但为了这个问题,我一直保持简单。

当我只是设置映射时,上面会引发 对象引用 错误。

考虑到这是可行的:

string enumString = MyEnum.MyEnumType.ToString();

我不明白为什么我的 AutoMapper 配置没有。

AutoMapper 可以处理这个问题,是我做错了什么,还是 AutoMapper 的错误?

有什么想法吗?

编辑

我也尝试过使用自定义解析器:

Mapper.CreateMap<MyEnum, string>()
                .ForMember(dest => dest, opt => opt.ResolveUsing<MyEnumResolver>());

public class MyEnumResolver: ValueResolver<MyEnum,string>

   protected override string ResolveCore(MyEnum source)
   
      return source.ToString();
   

同一行上的相同错误。 :(

【问题讨论】:

【参考方案1】:

对于您控制整个映射的两种类型之间的映射,请使用 ConvertUsing:

Mapper.CreateMap<MyEnum, string>().ConvertUsing(src => src.ToString());

所有其他方法都假定您映射到目标类型上的各个成员。

【讨论】:

啊——这很有道理。因为我在做.ForMember,但我实际上并没有尝试映射成员,我试图映射整个对象。效果很好 - 谢谢! +1 并被接受。 真的很棒的解决方案...!

以上是关于AutoMapper 5. 集合类型之间的转换的主要内容,如果未能解决你的问题,请参考以下文章

使用AutoMapper实现Dto和Model的自由转换(下)

使用AutoMapper实现Dto和Model的自由转换(中)

Automapper:不同类型之间的映射

对象映射工具AutoMapper介绍

AutoMapper 可以在值类型(枚举)和引用类型之间进行映射吗? (细绳)

09.AutoMapper 之自定义类型转换器(Custom Type Converters)