Automapper配置验证异常:使用DoNotUseDestinationValue仍无法忽略目标属性
问题原因
你混淆了DoNotUseDestinationValue()和Ignore()两个方法的作用:DoNotUseDestinationValue()的作用是:当调用mapper.Map(source, existingDestination)这类映射到已有目标对象的重载时,不会复用目标对象上该属性的现有值,强制按照映射规则重新赋值。它不会跳过Automapper的属性映射校验,因此Automapper依然会认为ListString是未配置映射规则的属性,触发校验异常。
解决方案
根据你的实际使用场景选择对应配置:
场景1:不需要对ListString做任何映射处理
如果仅需要让校验不报错、Automapper不对该属性做任何赋值,直接用Ignore()方法标记即可:
var config = new MapperConfiguration(cfg => { cfg.CreateMap<ClassDto, ClassModel>() .ForMember(i => i.ListString, opt => opt.Ignore()); });
场景2:需要给ListString指定映射规则且不复用目标原有值
如果你需要主动给ListString赋值,同时需要关闭目标原有值的复用,可以组合使用对应方法,比如固定赋值为空列表:
var config = new MapperConfiguration(cfg => { cfg.CreateMap<ClassDto, ClassModel>() .ForMember(i => i.ListString, opt => { opt.MapFrom(_ => new List<string>()); opt.DoNotUseDestinationValue(); }); });
内容的提问来源于stack exchange,提问作者lunatic84
相关产品推荐
相关产品推荐

