2011-02-06 7 views
6

Mam ciąg znaków, który jest prawidłową datą, ale jest ciągiem znaków i musi być ciągiem znaków. Jednak gdy próbuję auto mapę do datetime zgłasza wyjątekJak zmapować ciąg znaków na datę w automapperie?

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. 

bym miał nadzieję, że będzie to zrobić auto nawróconego, ale myślę, że trzeba powiedzieć to trochę, jak to zrobić.

Jak mogę go przekonać do konwersji?

Odpowiedz

12

utworzyć odwzorowanie i użyć konwertera:

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

Przelicznik:

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

Próbowałem następujących ale to nie działa i nie wiem dlaczego:

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

Jeśli ktoś wie, dlaczego to nie działa, daj mi znać :)

+0

Skończyłem robić coś takiego, użyłem jednak resolwera. Nie wiedziałem, że mają konwerter. Nie robię tylu czeków co ty, ponieważ czułem, że to było dla mojej walidacji. – chobo2

+6

Jeśli używasz konwertera, obsługuje on wszystkie konwersje ciągów-> daty, w dowolnym miejscu. Zastanowiłem się nad dołączeniem jednego, ale jest wiele powodów do zmartwień związanych z lokalizacją itp. W większości przypadków używam: CreateMap (). ConvertUsing (Convert.ToDateTime); –

+0

@Jimmy Bogard - Dlaczego CreateMap (). ForMember (d => d, opt => opt.MapFrom (DateTime.Parse)); nie działa? – Rookian

Powiązane problemy