2014-12-26 12 views
5

Kỳ vọng của tôi là AutoMapper (3.3.0) không tự động giải quyết chuỗi -> chuyển đổi DateTime, ngay cả khi chuỗi ở định dạng được hiểu rõ. Việc thiếu bao gồm chuỗi mặc định -> Trình chuyển đổi DateTime được ghi nhận (mặc dù bốn năm trước) trong một nhận xét của tác giả thư viện, Jimmy Bogard, về câu trả lời StackOverflow này: https://stackoverflow.com/a/4915449/1675729AutoMapper không tự động giải quyết chuỗi -> DateTime

Tuy nhiên, tôi có .NET Fiddle dường như gợi ý rằng AutoMapper thể xử lý bản đồ này theo mặc định: https://dotnetfiddle.net/dDtUGx

trong ví dụ đó, tài sản Zing được ánh xạ từ một string trong Foo đến một DateTime tại Bar mà không có một bản đồ tùy chỉnh hoặc giải quyết được quy định.

Tuy nhiên, khi mã này chạy trong các thử nghiệm đơn vị giải pháp của tôi (sử dụng cùng một phiên bản AutoMapper), nó tạo ra một ngoại lệ tôi mong đợi, đó là:

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 

gì đang gây ra hành vi không phù hợp này?

Để hoàn chỉnh, các mã bên trong .NET Fiddle được sao chép ở đây:

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

Bạn cũng cần phải chuỗi bản đồ vào DateTime – MikeSW

Trả lời

1

Tôi tin rằng kể từ Automapper v2.0 các string-DateTime chuyển đổi được xử lý bởi một nội IObjectMapper gọi TypeConverterMapper, nhưng nhìn vào nguồn, điều này dường như là nền tảng cụ thể: chỉ một số nền tảng (.Net đầy đủ, SL5, WinRT) cung cấp cho người lập bản đồ này. Việc lắp ráp "di động" .Net không có trình ánh xạ cụ thể nền tảng này.

Nếu kiểm tra đơn vị của bạn tham chiếu cụm lắp ráp di động của Automapper 3.3.0, bạn sẽ gặp lỗi. Nếu họ tham chiếu đầy đủ .Net 4.0, việc lập bản đồ sẽ thành công.

+1

Rất dễ tìm! Cảm ơn bạn đã điều tra - Tôi luôn vui khi chương trình máy tính hoạt động theo những cách có thể dự đoán được :) – NWard

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