2011-04-12 19 views
27

Garip sorun - i AutoMapper kullanarak, bir enum ve dize arasında haritasına çalışıyorum: .ToString() kullanarak bu im ÜzülmeyinDeğer Türü (Enum) ve Referans Türü Arasında Otomatik Eşleme Haritasını Can? (String)

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

, gerçekte i kullanıyorum enum üzerinde bir uzantı yöntemi (.ToDescription()), ancak soru uğruna basit tuttum.

Yukarıdakiler, yalnızca eşlemeyi ayarlarken yaptığınız bir nesne referansı hatasını atıyor.

bu işleri düşünüldüğünde: my AutoMapper yapılandırma yapmaz neden göremiyorum

string enumString = MyEnum.MyEnumType.ToString(); 

.

AutoMapper bunu halledebilir, yanlış bir şey mi yapıyorum, yoksa bu AutoMapper ile bir hata mı?

Herhangi bir fikrin var mı?

DÜZENLEME Ben de bir özel çözümleyicinizi kullanarak çalıştı

: Aynı hat üzerinde

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

aynı hata. :(

Eğer kullanım ConvertUsing tüm haritalama kontrolünü alıyorsun iki tür arasında haritalanması için

cevap

51

.

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

Diğer tüm yöntemler hedef türüne bireysel üyelere haritalama varsayıyorum

+2

Ahh - bu mantıklı. Çünkü .ForMember'i yapıyorum, ama aslında üyeyi haritalamaya çalışmıyorum, tüm nesneyi eşleştirmeye çalışıyorum. Harika çalışıyor - teşekkürler! +1 ve kabul edildi – RPM1984

+0

Gerçekten harika bir çözüm. ..! – imdadhusen