例外:指定的转换不是 valid.v

Exception: Specified cast is not valid.v

   at IBM.Data.DB2.Core.TypeMap.FromValue(Object oValue, Int32& iByteLength, DB2Connection connection, Int32 iArrayLength, String parameterName, Boolean bMultiRowCmd)
   at IBM.Data.DB2.Core.DB2Parameter.GetParamInfo(Int32 paramPos, DB2ParamInfo& paramInfo, Boolean chainBegin)
   at IBM.Data.DB2.Core.DB2ParameterCollection.GetParamInfoList(Boolean chainBegin)
   at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method, DB2CursorType reqCursorType, Boolean abortOnOptValueChg, Boolean skipDeleted, Boolean isResultSet, Int32 maxRows, Boolean skipInitialValidation)
   at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method)
   at IBM.Data.DB2.Core.DB2Command.ExecuteReader(CommandBehavior behavior)
   at IBM.Data.DB2.Core.DB2Command.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---

在以下代码行的位置抛出了异常。 var dr = await cmd.ExecuteReaderAsync()

我们对 dotnet core 2.1 没有任何问题,但是当我们更新到 dotnet core 3.1 时,我们 运行 遇到了这个问题。

更新 使用的 dotnetcore 2.1 项目 ibm.data.db2.core 1.3 使用 ibm.data.db2.core 3.1(单元测试通过)

的 dotnetcore 3.1 项目

我现在开始工作了。 在 dotnet core 2.1 中,对象值正确反序列化。在我的例子中,它是字符串,在 dotnet core 3.1 中它被反序列化为导致问题的 JsonElement,而 db2 没有将 jsonelement 识别为任何类型。

我通过添加将我的服务切换为使用 Newtonsoftjson services.AddControllers().AddNewtonsoftJson(); 现在它正在对它进行适当的脱盐处理。

bool 有一个未解决的问题 here,这与我的情况几乎相同,但我的对象是字符串类型。他们还建议在那里为 Object.

编写自定义转换器