AutoMapper如何在ForMember方法中实现Customer列表到CustomerDto列表的映射
AutoMapper 新版本嵌套集合映射解决方案
AutoMapper 9.x及后续版本已全面移除静态Mapper类的调用支持,你需要通过映射解析上下文获取当前映射器实例实现嵌套类型转换,具体实现步骤如下:
1. 配置类型映射
在你自定义的AutoMapper Profile类中添加如下配置:
public class CustomMappingProfile : Profile { public CustomMappingProfile() { // 先配置基础元素的映射规则 CreateMap<Customer, CustomerDto>(); // 配置SomeType到SomeTypeDto的映射 CreateMap<SomeType, SomeTypeDto>() .ForMember( dest => dest.SomeValues, opt => opt.MapFrom((src, _, _, context) => // 从上下文获取当前映射器实例,完成嵌套集合转换 context.Mapper.Map<List<CustomerDto>>(src.Customers) ) ); } }
2. 原有调用逻辑无需调整
你现有的映射调用代码可以直接使用:
var result = _mapper.Map<SomeTypeDto>(someType);
执行后result.SomeValues中存储的就是转换完成的CustomerDto类型集合。
注意事项
- 必须提前注册
Customer到CustomerDto的映射规则,AutoMapper会自动处理集合内元素的逐个转换 - 若你在ASP.NET Core等依赖注入环境中使用,需要在服务注册时引入你的Profile配置,示例:
builder.Services.AddAutoMapper(typeof(CustomMappingProfile)); - 由于
SomeValues声明为List<object>类型,CustomerDto实例可隐式转换为object,无需额外强制类型转换。
内容的提问来源于stack exchange,提问作者squezzi
相关产品推荐
相关产品推荐

