如何在Automapper 6中映射期间忽略所有源成员的空值?
我一直在寻找各处:stackoverflow,automapper文档,互联网,只是找不到这方面的任何信息,即使这似乎是一个非常普遍的问题。
我的映射:
CreateMap() .ForAllMembers(opt => opt.Condition(src => src != null));
这不起作用,因为src表示源对象(StatusLevelDTO),而不是源属性(我认为)。
更具体地说,如果我将ObjectA映射到ObjectB,ObjectA.SomeValue为null而ObjectB.SomeValue为2,我希望目标对象保持其值(2)。
我已经看到了这个问题: Automapper使用自定义解析器跳过空值并尝试了前两个答案,但它们似乎都已过时版本6。
有没有办法在Automapper 6中实现这一点? 我准确地使用6.0.2。
方法Condition
现在有五个重载,其中一个接受类型的谓词
Func
此TMember参数是源成员。 因此,您可以检查源成员是否为null:
CreateMap() .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));
此解决方案适用于我的项目,即使用AutoMapper 6.0.2。 在之前使用AutoMapper 4的项目中,我使用了IsSourceValueNull来实现相同的行为。
我对原始解决方案做了一些小改动。 我没有检查要映射的属性的类型,而是在ForAllPropertyMaps中设置filter以检查源对象的类型,以便自定义解析器仅应用于该源对象的映射。 但是filter可以根据需要设置为任何东西。
var config = new MapperConfiguration(cfg => { cfg.ForAllPropertyMaps( pm => pm.TypeMap.SourceType == typeof(), (pm, c) => c.ResolveUsing