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

Posted

技术标签:

【中文标题】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 可以在值类型(枚举)和引用类型之间进行映射吗? (细绳)的主要内容,如果未能解决你的问题,请参考以下文章

AutoMapper的介绍与使用

基本数据类型和包装类的区别

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

泛型和枚举

结构体,枚举类型

10. 结构和枚举