2014-12-26 9 views
5

La mia aspettativa è che AutoMapper (3.3.0) non risolva automaticamente le conversioni string -> DateTime, anche quando la stringa è in un formato ben compreso. La mancanza di inclusione di un convertitore stringa -> DateTime predefinito viene annotata (anche se quattro anni fa) in un commento dell'autore della libreria, Jimmy Bogard, in questa risposta StackOverflow: https://stackoverflow.com/a/4915449/1675729AutoMapper risolvendo in modo incoerente stringa -> DateTime

Tuttavia, ho un .NET Fiddle che sembra suggerire che automapper può gestire questa mappatura di default: https://dotnetfiddle.net/dDtUGx

in questo esempio, la proprietà Zing è mappata da un string in Foo ad un DateTime in bar senza una mappatura personalizzata o resolver viene specificato.

Tuttavia, quando questo codice viene eseguito nel mio test di unità di soluzione (utilizzando la stessa versione automapper), produce l'eccezione mi aspetto, che è:

AutoMapper.AutoMapperMappingExceptionMissing type map configuration or unsupported mapping. 
Mapping types: 
    String -> DateTime 
    System.String -> System.DateTime 
Destination path: 
    Bar.Zing 
Source value: 
    Friday, December 26, 2014 

cosa sta causando questo comportamento incoerente?

Per completezza, il codice all'interno del .NET Fiddle è qui riprodotto:

using System; 
using AutoMapper; 

public class Program 
{ 
    public static void Main() 
    { 
     var foo = new Foo(); 
     foo.Zing = DateTime.Now.ToLongDateString(); 
     Mapper.CreateMap<Foo, Bar>(); 
     var bar = Mapper.Map(foo, new Bar()); 
     Console.WriteLine(bar.Zing); 
    } 


    public class Foo 
    {  
     public string Zing { get; set; }  
    } 

    public class Bar 
    { 
     public DateTime Zing { get; set; } 
    } 
} 
+0

È necessario anche eseguire il mapping della stringa a DateTime – MikeSW

risposta

1

Credo poiché Automapper v2.0 il string-DateTime conversione è gestito da un interno IObjectMapper chiamato TypeConverterMapper, ma guardando la fonte, questa sembra essere specifica della piattaforma: solo alcune delle piattaforme (.Net full, SL5, WinRT) forniscono questo mapper. L'assembly .Net "portatile" non ha questo mapper specifico per piattaforma.

Se i test dell'unità fanno riferimento all'assieme portatile di Automapper 3.3.0, si ottiene l'errore. Se fanno riferimento all'assieme completo .Net 4.0, la mappatura avrà successo.

+1

Bella ricerca! Grazie per le indagini - Sono sempre contento quando i programmi per computer funzionano in modo prevedibile :) – NWard

Problemi correlati