如何用AutoMapper从嵌套对象集合映射出合并属性的目标集合?
问题解决:AutoMapper 嵌套对象属性映射失败修复
问题原因
当前映射配置中,OuterSource到Destination仅手动配置了MyBool的映射规则,但AutoMapper无法自动识别Destination的MyProperty1、MyProperty2需要从OuterSource.Inner对象中取值,导致这些属性被初始化为类型默认值(int默认0)。
修复方案
修改MyMappingProfile,通过IncludeMembers指定复用InnerSource→Destination的映射规则,同时保留MyBool的自定义转换逻辑:
public class MyMappingProfile : Profile { public MyMappingProfile() { CreateMap<InnerSource, Destination>(); CreateMap<OuterSource, Destination>() .IncludeMembers(src => src.Inner) // 优先使用Inner对象的映射规则填充属性 .ForMember(dest => dest.MyBool, opt => opt.MapFrom(src => src.MyCount > 0)); } }
原理说明
IncludeMembers会让AutoMapper先尝试用指定的嵌套对象(src.Inner)的映射规则填充目标属性,覆盖默认的同名属性匹配逻辑。- 手动配置的
MyBool属性规则优先级更高,能确保自定义的MyCount转MyBool逻辑正常生效。
验证结果
修改后运行单元测试,所有断言均会通过:
dest.MyBool.Should().BeTrue()保持通过dest.MyProperty1.Should().Be(1)成功映射为1dest.MyProperty2.Should().Be(2)成功映射为2
内容的提问来源于stack exchange,提问作者Adam Schaff
相关产品推荐
相关产品推荐

