You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:10:11