2011-04-12 78 views
27

奇怪的问题 - 我想要的枚举之间进行映射,使用AutoMapper:AutoMapper可以在值类型(枚举)和引用类型之间映射吗? (串)

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

不要担心使用.ToString(),即时通讯,在现实中我使用enum本身的扩展方法(.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(); 
    } 
} 

在同一行同样的错误。 :(

回答

51

对于两种类型,你正在做整个映射的控制,使用ConvertUsing之间的映射:

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

所有其他方法假定你映射到目的地类型个人会员

+2

Ahh - 这很有道理,因为我在做'.ForMember',但是我实际上并没有试图映射这个成员,所以我试图映射整个对象,很好用 - 谢谢!+1并且被接受。 – RPM1984 2011-04-12 23:11:13

+0

真的很棒的解决方案。 ..! – imdadhusen 2017-05-31 10:20:26