Adding Iso8601TimeSpanConverter to JsonConverter list throws ArrayTypeMismatch exception

本小妞迷上赌 提交于 2020-01-02 08:38:09

问题


I'm using AutoRest to auto generate a c# class for a REST API from a Swagger definition file.

The problem is that when the client class initialize methos is executed, it throws an ArrayTypeMismatch exception in the following code:

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()
        }
}

The offending piece of code is the Iso8601TimeSpanConverter added to the list of JsonConverters.

BTW, this only happens when running this code in a VSIX package. On a standalone app, it works fine.

I wonder if it has to do with multiple versions of Newtonsoft.Json loading and colliding?

Any ideas?


回答1:


I encounter the same problem but finally get it resolve by using app.config to unify the Newtonsoft.Json binding.

<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>

The issue is that Iso8601TimeSpanConverter might be inheriting a different version of JsonConverter than the one you are using on the AutoRest.



来源:https://stackoverflow.com/questions/39339605/adding-iso8601timespanconverter-to-jsonconverter-list-throws-arraytypemismatch-e

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!