天天看點

AutoMapper(六)

AutoMapper隻要求元素類型的配置而不要求可能會用到的任何數組或者list類型。比如,我們有一個簡單的源和目标類型:

支援所有的基本泛型集合,代碼如下:

AutoMapper(六)
AutoMapper(六)

以上代碼是集合和集合之間的映射,但是映射的配置CreateMap方法中隻是配置的是類型之間的映射,而沒有設計任何集合類型。

測試結果如下,可見集合之間映射成功:

AutoMapper(六)

具體來說,支援的源集合類型包括:

IEnumerable

IEnumerable<T>

ICollection

ICollection<T>

IList

IList<T>

List<T>

Arrays

很多時候,在我們的源和目标類型中可能有一個類型層次關系。AutoMapper支援多态數組和集合,是以如果發現派生的源或者目标類型,就會使用它們。

AutoMapper仍然要求顯示配置孩子映射,因為它不能“猜出”具體使用哪一個孩子目标映射。

在Main方法中添加如下代碼:

測試結果如下:

AutoMapper(六)

上面我們建立了一個源的數組,其中包含兩個ParentSource和一個ChildSource,是以兩個ParentSource成功地映射到了ParentDestination,而CreateMap配置中,ParentSource到ParentDestination的映射配置包含了ChildSource到ChildDestination的配置,是以執行Mapper.Map<ParentDestination[]>(sources)的時候,也可以将ChildSource映射到ChildDestination。

上面的代碼,是在基類中配置繼承的,除此之外,也可以在派生類中配置繼承:

這裡介紹一下額外的複雜性,因為一個屬性映射時可以有多種方式。下面是這些源的優先級:

顯式映射 (使用.MapFrom())

繼承的顯式映射 

慣例映射 (通過慣例比對的屬性)

忽略的屬性映射

下面來示範一下:

這裡還是用上面定義的四個類:Order,OrderDto,PCOrder,MobileOrder:

配置映射的方法使用的是在父類中配置繼承映射

執行結果如下:

AutoMapper(六)

注意在我們的映射配置中,我們已經忽略了<code>Referrer</code>(因為Order基類中不存在這個屬性),但是在基類的映射中,慣例比忽略的屬性有更高的優先級,因而屬性仍然得到了映射。

本文轉自tkbSimplest部落格園部落格,原文連結:http://www.cnblogs.com/farb/p/4944018.html,如需轉載請自行聯系原作者

繼續閱讀