使用AutoMapper的CreateMap映射列表时如何访问列表元素的属性
解决方案
AutoMapper原生支持集合类型的自动映射,不需要显式为List<T>、IEnumerable<T>这类集合类型创建映射规则,你只需要先配置集合元素的类型映射即可:
- 第一步:配置
CouponCsvItem到Coupon的单对象映射,在单对象映射中配置需要自定义解析的属性
x.CreateMap<CouponCsvItem, Coupon>() .ForMember(dest => dest.SchoolType, opt => opt.MapFrom<SchoolResolver>()); // 不需要额外创建List之间的映射规则
- 第二步:直接调用映射方法转换集合即可,AutoMapper会自动遍历每个元素执行你配置的单对象映射规则
var couponList = mapper.Map<List<Coupon>>(csvItemList);
如果你确实需要自定义整个集合的转换逻辑,才需要配置集合级别的ConvertUsing,示例如下:
x.CreateMap<List<CouponCsvItem>, List<Coupon>>() .ConvertUsing((source, destination, context) => { var result = new List<Coupon>(); foreach(var item in source) { // 手动处理每个元素的属性映射,包括调用SchoolResolver的逻辑 var coupon = new Coupon(); coupon.SchoolType = new SchoolResolver().Resolve(item, coupon, null, context); // 补充其他属性映射逻辑 result.Add(coupon); } return result; });
第一种方式是官方推荐的标准用法,配置更简单,也能完全满足单个元素属性自定义解析的需求。
内容的提问来源于stack exchange,提问作者pedrommuller
相关产品推荐
相关产品推荐

