首页 文章

更新到Automapper v5时出现.NullSubstitute错误

提问于
浏览
2

我正在将我们的自动化库从版本3更新到版本5.2.0,我收到此错误

System.InvalidOperationException: System.InvalidOperationException: No coercion operator is defined between types 'System.String' and 'System.Int32'

在两行复杂对象的映射设置中的这行代码 .

cfg.CreateMap<objA, objB>()
.ForAllMembers(config => config.NullSubstitute(string.Empty));

我猜这种情况正在发生,因为它无法将int设置为null,而且现在它已经明确了,并且在automapper的v3中它只是忽略了它 . 有人可以证实吗?我是否必须在版本5中显式映射每个成员类型?

对于此映射,对象具有int,bools和字符串 . 有没有办法告诉它将字符串映射到String.Empty时为null并忽略其他类型?

1 回答

  • 3

    不幸的是,这是 NullSubstitute 的AM5行为,并且 ForAllMembers 不支持过滤,也不提供有关被映射成员的任何信息 .

    作为一种解决方法,我建议使用 ForAllPropertyMaps 方法执行手册"fix up",该方法允许过滤并提供必要的信息:

    cfg.ForAllPropertyMaps(
        pm => "".Equals(pm.NullSubstitute) && pm.DestinationPropertyType != typeof(string),
        (pm, m) => pm.NullSubstitute = null
    );
    

相关问题