列表和数组(Lists and Arrays)
AutoMapper
只需要配置元素类型的映射配置,不需要针对列表和数组进行配置。举个例子,我们可能有以下源类型和目标类类型:
public class Source{ public int Value { get; set; } }public class Destination{ public int Value { get; set; } }
所有的基础泛型集合类型都支持:
Mapper.Initialize(cfg => cfg.CreateMap<Source, Destination>());var sources = new[] { new Source { Value = 5 }, new Source { Value = 6 }, new Source { Value = 7 } }; IEnumerable<Destination> ienumerableDest = Mapper.Map<Source[], IEnumerable<Destination>>(sources); ICollection<Destination> icollectionDest = Mapper.Map<Source[], ICollection<Destination>>(sources); IList<Destination> ilistDest = Mapper.Map<Source[], IList<Destination>>(sources);List<Destination> listDest = Mapper.Map<Source[], List<Destination>>(sources); Destination[] arrayDest = Mapper.Map<Source[], Destination[]>(sources);
换句话说,源集合类型支持以下几种:
IEnumerable
IEnumerable<T>
ICollection
ICollection<T>
ILsit
IList<T>
List<T>
Arrays
对于非泛型的枚举类型,仅支持未映射的可分配类型,因为AutoMapper
不能推算出你想尝试映射的类型。如上例所示,没有必要显式配置列表类型,只需要配置其成员类型就可以了。
当映射一个已存在的集合时,会先清空目标集合。如果这不是你想要的,那么请查看AutoMapper.Collection
。
多态元素集合
很多时候,我们的源类型和目标类型都会继承至其它类型,AutoMapper
支持多态数组和集合,如果存在对应的派生类型则使用
public class ParentSource{ public int Value1 { get; set; } }public class ChildSource : ParentSource { public int Value2 { get; set; } }public class ParentDestination{ public int Value1 { get; set; } }public class ChildDestination : ParentDestination { public int Value2 { get; set; } }
AutoMapper
仍然需要显式配置子映射, 因为AutoMapper
不知道要使用哪一个子目标映射配置。下面举个例子:
Mapper.Initialize(c=> { c.CreateMap<ParentSource, ParentDestination>() .Include<ChildSource, ChildDestination>(); c.CreateMap<ChildSource, ChildDestination>(); });var sources = new[] { new ParentSource(), new ChildSource(), new ParentSource() };var destinations = Mapper.Map<ParentSource[], ParentDestination[]>(sources); destinations[0].ShouldBeInstanceOf<ParentDestination>(); destinations[1].ShouldBeInstanceOf<ChildDestination>(); destinations[2].ShouldBeInstanceOf<ParentDestination>();
作者:这个用户有点逗
链接:https://www.jianshu.com/p/419a3b7f12d5
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦