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

时间:2017-03-07 21:21:54

标签: c# automapper

我正在将我们的自动化库从版本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 个答案:

答案 0 :(得分:3)

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

作为一种解决方法,我建议您执行手册&#34;修复&#34;使用允许过滤的ForAllPropertyMaps方法并提供必要的信息:

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