将Iso8601TimeSpanConverter添加到JsonConverter列表会抛出ArrayTypeMisma

本文关键字:ArrayTypeMisma 列表 JsonConverter Iso8601TimeSpanConverter 添加 | 更新日期: 2023-09-27 18:05:42

我正在使用AutoRest从Swagger定义文件中自动生成REST API的c#类。

问题是,当执行客户端类初始化方法时,它会在以下代码中抛出ArrayTypeMismatch异常:

SerializationSettings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    DateFormatHandling = DateFormatHandling.IsoDateFormat,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    NullValueHandling = NullValueHandling.Ignore,
    ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
    ContractResolver = new ReadOnlyJsonContractResolver(),
    Converters = new List<JsonConverter>
        {
            new Iso8601TimeSpanConverter()
        }
}

违规的代码段是添加到JsonConverters列表中的Iso8601TimeSpanConverter。

顺便说一句,只有在VSIX包中运行此代码时才会发生这种情况。在一个独立的应用程序上,它可以正常工作。

我想知道这是否与多个版本的Newtonsoft有关。Json加载和碰撞?

任何想法?

将Iso8601TimeSpanConverter添加到JsonConverter列表会抛出ArrayTypeMisma

我遇到了同样的问题,但最终通过使用app.config来统一Newtonsoft来解决。Json绑定。

<configuration>
  <runtime>
    <assemblyBinding>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

问题是Iso8601TimeSpanConverter可能会继承不同版本的JsonConverter,而不是您在AutoRest上使用的版本。