2011-02-06 18 views
6

मेरे पास एक स्ट्रिंग है जो वैध दिनांक है लेकिन यह एक स्ट्रिंग है और इसे एक स्ट्रिंग होने की आवश्यकता है। लेकिन जब मैं एक datetime करने के लिए ऑटो नक्शा यह करने की कोशिश यह एक अपवादautomapper में किसी दिनांक को स्ट्रिंग को कैसे मैप करें?

Trying to map System.String to System.DateTime. 

Trying to map System.String to System.DateTime. 
Using mapping configuration for ViewModels.FormViewModel to Framework.Domain.Test 
Destination property: DueDate 
Missing type map configuration or unsupported mapping. 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: AutoMapper.AutoMapperMappingException: Trying to map System.String to System.DateTime. 
Using mapping configuration for ViewModels.FormViewModel to 
Framework.Domain.Task 
Destination property: DueDate 
Missing type map configuration or unsupported mapping. 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. 

मैं आशा व्यक्त की है कि यह एक स्वत: परिवर्तित करना होगा फेंकता है लेकिन मुझे लगता है मैं यह बताना कुछ कैसे यह करने के लिए करने के लिए है लगता है।

मैं इसे परिवर्तित करने के लिए कैसे कह सकता हूं?

उत्तर

12

एक कनवर्टर एक मानचित्रण बनाएं और उनका उपयोग:

CreateMap<string, DateTime>().ConvertUsing<StringToDateTimeConverter>(); 

कनवर्टर:

public class StringToDateTimeConverter: ITypeConverter<string, DateTime> 
{ 
    public DateTime Convert(ResolutionContext context) 
    { 
     object objDateTime = context.SourceValue; 
     DateTime dateTime; 

     if (objDateTime == null) 
     { 
      return default(DateTime); 
     } 

     if (DateTime.TryParse(objDateTime.ToString(), out dateTime)) 
     { 
      return dateTime; 
     } 

     return default(DateTime); 
    } 
} 

मैंने कोशिश की निम्नलिखित लेकिन यह काम नहीं करता और मैं नहीं जानता कि क्यों:

CreateMap<string, DateTime>().ForMember(d => d, opt => opt.MapFrom(x => DateTime.Parse(x))); 

अगर कोई जानता है कि यह क्यों काम नहीं करता है, तो मुझे बताएं :)

+0

मैंने ऐसा कुछ करने का अंत किया, हालांकि मैंने एक रिज़ॉल्वर का उपयोग किया। मुझे नहीं पता था कि उनके पास कनवर्टर था। मैं जितना करता हूं उतना चेक नहीं करता क्योंकि मुझे लगा कि ऐसा करने के लिए मेरे सत्यापन के लिए यह था। – chobo2

+6

यदि आप एक कनवर्टर का उपयोग करते हैं, तो यह कहीं भी सभी स्ट्रिंग-> दिनांक रूपांतरणों को संभालता है। मैंने एक को शामिल करने के बारे में सोचा, लेकिन स्थानीयकरण आदि के बारे में चिंता करने के लिए बहुत कुछ है। अधिकांश समय मैं उपयोग करता हूं: CreateMap ()। कनवर्टिंग (कन्वर्ट। टोडेटटाइम); –

+0

@ जिमी बोगर्ड - CreateMap <स्ट्रिंग, डेटटाइम>() क्यों है। ForMember (d => d, opt => opt.MapFrom (DateTime.Parse)); काम नहीं करता? – Rookian

संबंधित मुद्दे