AutoMapper映射失败:从Class A到IEnumerable<C>映射报错求助
问题分析与解决方案
你遇到的问题核心是AutoMapper无法自动推导带自定义转换的链式映射。你给A到IEnumerable<B>配置了ConvertUsing自定义转换逻辑,这会让AutoMapper认为这个映射是完全自定义的,不会自动将其结果再链式转换为IEnumerable<C>,哪怕你已经配置了B到C的映射。
解决方案一:手动配置A到IEnumerable<C>的映射
直接添加一个针对A到IEnumerable<C>的映射规则,复用已有的B到C映射逻辑:
// 新增A到IEnumerable<C>的映射 cfg.CreateMap<A, IEnumerable<C>>().ConvertUsing((source, destination, context) => context.Mapper.Map<IEnumerable<C>>(source.listB) );
这样调用mapper.Map<A, IEnumerable<C>>(instanceA)时,AutoMapper会先获取source.listB,再利用已有的B→C映射将其转换为IEnumerable<C>。
解决方案二:移除A到IEnumerable<B>的自定义转换(推荐)
如果A类本身就包含listB属性(类型为IEnumerable<B>),你完全不需要手动配置A到IEnumerable<B>的ConvertUsing——AutoMapper会自动识别并映射这个属性。去掉自定义转换后,AutoMapper可以自动完成链式映射:
// 移除这行自定义转换 // cfg.CreateMap<A, IEnumerable<B>>().ConvertUsing((i, o) => i.listB); // 保留B到C的映射 cfg.CreateMap<B, C>();
此时mapper.Map<A, IEnumerable<C>>(instanceA)会自动工作:AutoMapper先从A中取出listB,再逐个将B实例转换为C实例,最终返回IEnumerable<C>。
内容的提问来源于stack exchange,提问作者Apolixit
相关产品推荐
相关产品推荐

