首页 文章

将Iso8601TimeSpanConverter添加到JsonConverter列表会抛出ArrayTypeMismatch异常

提问于
浏览
2

我正在使用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加载和碰撞有关?

有任何想法吗?

1 回答

  • 0

    我遇到了同样的问题,但最终通过使用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可能继承了与您在AutoRest上使用的版本不同的JsonConverter版本 .

相关问题