2011-04-12 18 views
27

अजीब समस्या - मैं एक enum और एक स्ट्रिंग के बीच मैप करने के लिए, AutoMapper का उपयोग कर कोशिश कर रहा हूँ:एक वैल्यू टाइप (एनम) और संदर्भ प्रकार के बीच ऑटोमैपर मानचित्र कर सकते हैं? (स्ट्रिंग)

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

चिंता मत करो कि im .ToString() का उपयोग कर, वास्तव में मैं उपयोग कर रहा हूँ enum पर एक विस्तार विधि (.ToDescription()), लेकिन मैंने सवाल के लिए इसे सरल रखा है।

उपर्युक्त ऑब्जेक्ट संदर्भ त्रुटि फेंकता है, जब मैं बस मैपिंग सेट कर रहा हूं।

ध्यान में रखते हुए इस काम करता है:

string enumString = MyEnum.MyEnumType.ToString(); 

मैं नहीं देख सकते हैं क्यों मेरे 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

अहह - यह समझ में आता है। क्योंकि मैं 'FORMember' कर रहा था, लेकिन मैं वास्तव में सदस्य को मैप करने की कोशिश नहीं कर रहा हूं, मैं पूरी वस्तु को मैप करने की कोशिश कर रहा हूं। बहुत अच्छा काम करता है - धन्यवाद! +1 और स्वीकार किया गया। – RPM1984

+0

वास्तव में बहुत अच्छा समाधान। ..! – imdadhusen