2011-05-12 189 views
0

我以前使用automapper來映射列表,因爲某些原因,在這種情況下它不起作用。AutoMapper無法映射簡單列表

 public class MyType1 { 
      public int Id { get; set; } 
      public string Description { get; set; } 
     } 


     public class MyType2 { 
      public int Id { get; set; } 
      public string Description { get; set; } 
     } 

    public void DoTheMap() { 
       Mapper.CreateMap<MyType2, MyType1>(); 
       Mapper.AssertConfigurationIsValid(); 

       var theDto1 = new MyType2() { Id = 1, Description = "desc" }; 
       var theDto2 = new MyType2() { Id = 2, Description = "desc2" }; 
       List<MyType2> type2List = new List<MyType2> { theDto1, theDto2 }; 

       List<MyType1> type1List = Mapper.DynamicMap<List<MyType1>>(type2List); 
    //FAILURE. NO EXCEPTION, BUT ZERO VALUES 

       List<MyType1> type1List2 =type2List.Select(Mapper.DynamicMap<MyType1>).ToList(); 
    //SUCCESS, WITH LINQ SELECT 
     } 

回答

2

更改此:

Mapper.DynamicMap<List<MyType1>>(type2List) 

要這樣:

Mapper.Map<List<MyType1>, List<MyType2>>(type2List); 

DynamicMap只有當你不知道在編譯時的類型 - 對於像匿名類型。

+0

謝謝吉米。不知道爲什麼動態地圖在這種情況下不起作用。當然,它只需要從傳入的值中推斷出該類型,並將其映射到指定的類型?似乎多餘的必須說明映射的類型。 – JAG 2011-05-12 15:07:34

+0

除非運行時類型與編譯時類型不同。解決此問題有一個拉取請求,但我們仍在制定詳細信息以確保它與現有方法不衝突: https://github.com/jbogard/AutoMapper/pull/17 – 2011-05-13 12:43:49