2011-02-06 34 views
6

Tôi có một chuỗi là ngày hợp lệ nhưng đó là một chuỗi và nó cần phải là một chuỗi. Tuy nhiên khi tôi cố gắng để bản đồ tự động nó vào một datetime nó ném một ngoại lệLàm thế nào để ánh xạ một chuỗi đến một ngày trong 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. 

tôi sẽ hy vọng rằng nó sẽ làm một chuyển đổi tự động nhưng tôi đoán tôi phải nói với nó một số cách để làm điều này.

Tôi làm cách nào để yêu cầu chuyển đổi?

Trả lời

12

Tạo một ánh xạ và sử dụng một bộ chuyển đổi:

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

Chuyển đổi:

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

tôi đã cố gắng sau nhưng điều này không làm việc và tôi không biết tại sao:

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

Nếu ai đó biết tại sao điều này không hiệu quả, hãy cho tôi biết :)

+0

Tôi đã kết thúc làm một cái gì đó như thế, tôi đã sử dụng một trình phân giải mặc dù. Tôi không biết họ có một công cụ chuyển đổi. Tôi không làm như nhiều kiểm tra như bạn làm như tôi cảm thấy nó đã được xác nhận của tôi để làm điều đó. – chobo2

+6

Nếu bạn sử dụng một trình chuyển đổi, nó xử lý tất cả các chuỗi chuyển đổi ngày tháng, ở bất kỳ đâu. Tôi nghĩ về việc bao gồm một, nhưng có rất nhiều lo lắng về với nội địa hóa vv Hầu hết thời gian tôi sử dụng: CreateMap (). ConvertUsing (Convert.ToDateTime); –

+0

@Jimmy Bogard - Tại sao CreateMap (). ForMember (d => d, opt => opt.MapFrom (DateTime.Parse)); không hoạt động? – Rookian

Các vấn đề liên quan