如何通过AutoMapper自动映射Tuple<User,string>至继承User的UserEx类
解决方案
由于UserEx继承自User,AutoMapper会自动处理父类到子类的属性映射,不需要手动逐个配置User的字段。你可以通过以下两种方式实现自动映射Item1到UserEx:
方法1:使用ForAllMembers设置默认映射源
通过ForAllMembers指定所有成员默认从Item1映射,再单独覆盖extraData的映射规则:
profile.CreateMap<Tuple<User, string>, UserEx>() .ForAllMembers(opt => opt.MapFrom(src => src.Item1)) .ForMember(d => d.extraData, opt => opt.MapFrom(src => src.Item2));
方法2:利用已有映射先构造UserEx实例
先通过AutoMapper的默认映射将Item1转换为UserEx,再设置extraData:
profile.CreateMap<Tuple<User, string>, UserEx>() .ConstructUsing((src, context) => context.Mapper.Map<UserEx>(src.Item1)) .ForMember(d => d.extraData, opt => opt.MapFrom(src => src.Item2));
为什么你的IncludeMembers尝试无效?
IncludeMembers的作用是将源对象的某个成员的属性扁平化到目标对象中,适用于目标对象包含该成员的属性但并非继承关系的场景。而这里UserEx是User的子类,AutoMapper的继承映射逻辑和IncludeMembers的扁平化逻辑不匹配,因此无法生效。
内容的提问来源于stack exchange,提问作者Sam Carleton
相关产品推荐
相关产品推荐

