2011-04-12 18 views
27

problema extraño - Estoy tratando de establecer una relación entre una enumeración y una cadena, utilizando AutoMapper:¿Puede AutoMapper Map entre un tipo de valor (Enum) y un tipo de referencia? (Cadena)

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

No se preocupe que im usando .ToString(), en realidad estoy usando un método de extensión en la propia enumeración (.ToDescription()), pero lo he mantenido simple por el bien de la pregunta.

Lo anterior arroja un referencia de objeto error, cuando estoy haciendo simplemente la configuración de la asignación.

Teniendo en cuenta esto funciona:

string enumString = MyEnum.MyEnumType.ToString(); 

No puedo ver por qué la configuración de mi AutoMapper no lo hace.

Puede AutoMapper manejar esto, estoy haciendo algo mal, o se trata de un error con AutoMapper?

¿Alguna idea?

EDITAR

También he intentado usar un dispositivo de resolución personalizado:

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(); 
    } 
} 

mismo error en la misma línea. :(

Respuesta

51

Para la correlación entre dos tipos en la que está tomando el control de todo el mapeo, el uso ConvertUsing:.

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

Todos los otros métodos asumen que se aplica la relación de los miembros individuales en el tipo de destino

+2

Ahh -.. que tiene sentido porque yo estaba haciendo '.ForMember', pero en realidad no im tratando de mapear el miembro, im tratando de trazar todo el objeto funciona muy bien - gracias 1 y aceptado – RPM1984

+0

realmente una gran solución.. ..! – imdadhusen

Cuestiones relacionadas