Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding Iso8601TimeSpanConverter to JsonConverter list throws ArrayTypeMismatch exception

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?

like image 560
VS.Php Avatar asked Dec 03 '25 10:12

VS.Php


1 Answers

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.

like image 139
JeromeZhao Avatar answered Dec 04 '25 23:12

JeromeZhao



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!