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 在 enum 和 string 之间进行映射:
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的自由转换(中)