AutoMapper隻要求元素類型的配置而不要求可能會用到的任何數組或者list類型。比如,我們有一個簡單的源和目标類型:
支援所有的基本泛型集合,代碼如下:


以上代碼是集合和集合之間的映射,但是映射的配置CreateMap方法中隻是配置的是類型之間的映射,而沒有設計任何集合類型。
測試結果如下,可見集合之間映射成功:
具體來說,支援的源集合類型包括:
IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
IList
IList<T>
List<T>
Arrays
很多時候,在我們的源和目标類型中可能有一個類型層次關系。AutoMapper支援多态數組和集合,是以如果發現派生的源或者目标類型,就會使用它們。
AutoMapper仍然要求顯示配置孩子映射,因為它不能“猜出”具體使用哪一個孩子目标映射。
在Main方法中添加如下代碼:
測試結果如下:
上面我們建立了一個源的數組,其中包含兩個ParentSource和一個ChildSource,是以兩個ParentSource成功地映射到了ParentDestination,而CreateMap配置中,ParentSource到ParentDestination的映射配置包含了ChildSource到ChildDestination的配置,是以執行Mapper.Map<ParentDestination[]>(sources)的時候,也可以将ChildSource映射到ChildDestination。
上面的代碼,是在基類中配置繼承的,除此之外,也可以在派生類中配置繼承:
這裡介紹一下額外的複雜性,因為一個屬性映射時可以有多種方式。下面是這些源的優先級:
顯式映射 (使用.MapFrom())
繼承的顯式映射
慣例映射 (通過慣例比對的屬性)
忽略的屬性映射
下面來示範一下:
這裡還是用上面定義的四個類:Order,OrderDto,PCOrder,MobileOrder:
配置映射的方法使用的是在父類中配置繼承映射
執行結果如下:
注意在我們的映射配置中,我們已經忽略了<code>Referrer</code>(因為Order基類中不存在這個屬性),但是在基類的映射中,慣例比忽略的屬性有更高的優先級,因而屬性仍然得到了映射。
本文轉自tkbSimplest部落格園部落格,原文連結:http://www.cnblogs.com/farb/p/4944018.html,如需轉載請自行聯系原作者