Automapper PreCondition非空条件不生效问题求助
解决Automapper空值字段映射问题
你的代码无法正常工作,核心原因是PreCondition仅控制是否应用该成员映射规则,但未明确处理空值场景下的目标字段赋值逻辑。可以用以下两种更可靠的写法替代:
方法一:在MapFrom中直接判断空值
这种写法更简洁,无需额外的PreCondition,直接在映射逻辑里覆盖空值与非空的处理:
.ForMember(dest => dest.PersianEndDate, opt => { opt.MapFrom(src => src.EndDate != null ? src.EndDate.Value.toShamsi().ToString() : null); })
方法二:使用ResolveUsing自定义解析逻辑
如果需要更复杂的处理逻辑,ResolveUsing的灵活性更高:
.ForMember(dest => dest.PersianEndDate, opt => { opt.ResolveUsing(src => { if (src.EndDate == null) return null; return src.EndDate.Value.toShamsi().ToString(); }); })
补充说明
原来的PreCondition写法中,当src.EndDate为null时,该成员的映射规则会被跳过,Automapper会用默认行为处理目标字段(比如设为空字符串),这大概率不符合你的预期。上面两种写法都明确了空值时的赋值结果,同时在非空时执行转换逻辑,能精准控制映射行为。
内容的提问来源于stack exchange,提问作者nnmmss
相关产品推荐
相关产品推荐

