我正在将我们的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中,我是否必须显式地映射每个成员类型?
对于此映射,该对象具有整数、布尔值和字符串。是否有一种方法可以告诉它当字符串为空时将其映射为String.Empty并忽略其他类型?
ForAllPropertyMaps
中,“All”还能有什么其他意思呢 :) - Ivan StoevForAllMembers
调用设置的无效值。如果你想让所有类型的字符串成员替换为空字符串,则可以从具体映射中删除ForAlllMembers
调用,并使用单个cfg.ForAllPropertyMaps(pm => p.NullSubstitute == null && pm.DestinationPropertyType == typeof(string), (pm, m) => pm.NullSubstitute = "");
将它们全部设置好。 - Ivan StoevNullSubstitute
的工作原理。根据文档,“替代品被假定为源成员类型,并将通过任何映射/转换后到达目标类型。”我提供的替代品与目标成员兼容,而不是源成员。没有定义转换运算符来将替代品类型更改为源类型,因此我得到了“无强制转换运算符”异常。将替代品类型更改为源类型后,错误消失了。 - Suncat2000