Automapper嵌套映射不同列表对象时ClassA转ClassC无结果如何解决
AutoMapper 嵌套列表映射配置方案
要实现First类到Second类的映射,需要逐层配置三类映射关系:ClassA→ClassC、ClassA→ClassB、First→Second,具体配置如下:
1. 编写映射配置Profile
using AutoMapper; public class CustomMappingProfile : Profile { public CustomMappingProfile() { // ClassA和ClassC属性名完全一致,无需额外配置映射规则 CreateMap<ClassA, ClassC>(); // ClassA映射到ClassB:将ClassA本身映射到ClassB的Cobj属性 CreateMap<ClassA, ClassB>() .ForMember(dest => dest.Cobj, opt => opt.MapFrom(src => src)) // 若ClassA中没有对应Email的字段,可省略该行配置,Email会默认赋值为null .ForMember(dest => dest.Email, opt => opt.MapFrom(src => "" /* 替换为实际业务的Email取值逻辑 */)); // First映射到Second:直接将AList映射到BList,AutoMapper会自动处理列表元素的映射 CreateMap<First, Second>() .ForMember(dest => dest.BList, opt => opt.MapFrom(src => src.AList)); } }
2. 注册AutoMapper服务(以ASP.NET Core为例)
// 在Program.cs中添加注册逻辑,自动扫描当前程序集的Profile配置 builder.Services.AddAutoMapper(typeof(CustomMappingProfile).Assembly);
3. 调用映射示例
// 构造源对象 var firstSource = new First { AList = new List<ClassA> { new ClassA { FirstName = "张", LastName = "三" }, new ClassA { FirstName = "李", LastName = "四" } } }; // 注入IMapper后调用映射方法 var secondResult = _mapper.Map<Second>(firstSource); // 此时secondResult.BList中每个元素的Cobj属性都会正确赋值对应的FirstName和LastName
若需要实现Second到First的反向映射,只需要在每个CreateMap配置后追加.ReverseMap()方法即可。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

