2011-02-06 14 views
6

Tengo una cadena que es una fecha válida pero es una cadena y debe ser una cadena. Sin embargo cuando intento mapa de auto a una fecha y hora que se produce una excepción¿Cómo asignar una cadena a una fecha en 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. 

yo habría esperado que lo haría un convertido automático pero supongo que tengo que decir que de alguna forma para hacer esto.

¿Cómo puedo decir que convierta?

Respuesta

12

Crear un mapeo y utilizar un convertidor:

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

Convertidor:

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

He intentado lo siguiente, pero esto no funciona y no sé por qué:

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

Si alguien sabe por qué esto no funciona, hágamelo saber :)

+0

Terminé haciendo algo así, aunque utilicé una resolución. No sabía que tenían un convertidor. No hago tantos controles como tú, ya que sentí que era mi validación para hacer eso. – chobo2

+6

Si usa un convertidor, maneja todas las conversiones de cadena-> fecha, en cualquier lugar. Pensé en incluir uno, pero hay mucho de qué preocuparse con la localización, etc. La mayoría de las veces uso: CreateMap (). ConvertUsing (Convert.ToDateTime); –

+0

@Jimmy Bogard - ¿Por qué CreateMap (). ForMember (d => d, opt => opt.MapFrom (DateTime.Parse)); ¿No funciona? – Rookian

Cuestiones relacionadas