AutoMapper 映射值类型为 NULL 的问题及解决方案
CreateMap<SaveMaterialDto, Material>() .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForAllMembers(opt => opt.Condition((src, dest, srcMember, destMember, context) => { if (srcMember != null && srcMember.GetType().IsValueType) { return !srcMember.Equals(Activator.CreateInstance(srcMember.GetType())); } return srcMember != null; }));
这段代码使用 Automapper 库创建了一个映射规则,将 'SaveMaterialDto' 对象映射到 'Material' 对象。其中,使用 '.ForMember()' 方法指定了 'Id' 属性不进行映射。
'.ForAllMembers()' 方法用于为所有成员定义条件,这个条件函数判断源对象的成员是否为值类型且不为空,若满足条件则进行映射。否则,不进行映射。
但是,这个条件函数没有处理值类型为 'null' 的情况。如果源对象的值类型成员为 'null',它也会被映射到目标对象,而不是映射成 'null'。
如果你想要将源对象的值类型为 'null' 的成员映射成 'null',可以修改条件函数如下:
.ForAllMembers(opt => opt.Condition((src, dest, srcMember, destMember, context) =>
{
if (srcMember != null && srcMember.GetType().IsValueType)
{
return !srcMember.Equals(Activator.CreateInstance(srcMember.GetType()));
}
return srcMember != null || destMember != null;
}));
这样修改后,如果源对象的值类型成员为 'null',则不进行映射,目标对象的对应成员也会被设置为 'null'。
原文地址: https://www.cveoy.top/t/topic/qlHc 著作权归作者所有。请勿转载和采集!