AutoMapper不一致地自动解析字符串 - > DateTime

NWa*_*ard 5 c# string datetime automapper

我的期望是AutoMapper(3.3.0)不会自动解析字符串 - > DateTime转换,即使字符串是一种易于理解的格式.在图书馆作者吉米·博加德(Jimmy Bogard)对此StackOverflow答案的评论中,注意到缺少一个默认字符串 - > DateTime转换器(尽管是四年前):https://stackoverflow.com/a/4915449/1675729

但是,我有一个.NET小提琴,它似乎暗示AutoMapper 可以默认处理这个映射:https://dotnetfiddle.net/dDtUGx

在该示例中,Zing属性从stringin 映射FooDateTimein in Bar,而不指定自定义映射或解析器.

但是,当此代码在我的解决方案单元测试中运行时(使用相同的AutoMapper版本),它会产生我期望的异常,即:

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
Run Code Online (Sandbox Code Playgroud)

导致这种不一致行为的原因是什么?

为了完整起见,.NET Fiddle中的代码在此处转载:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

cod*_*zen 1

我相信自 Automapper v2.0 起,stringto转换是由一个名为 的DateTime内部处理的,但查看源代码,这似乎是特定于平台的:只有某些平台(.Net full、SL5、WinRT)提供此映射器。“便携式”.Net 程序集没有此平台特定的映射器。IObjectMapperTypeConverterMapper

如果您的单元测试引用 Automapper 3.3.0 的可移植程序集,则会出现错误。如果它们引用完整的 .Net 4.0 程序集,映射就会成功。