Добавление Iso8601TimeSpanConverter в список JsonConverter вызывает исключение ArrayTypeMismatch
Я использую AutoRest для автоматического создания класса aC# для REST API из файла определения Swagger.
Проблема заключается в том, что при выполнении методов инициализации класса клиента он генерирует исключение 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()
}
}
Оскорбительный фрагмент кода - Iso8601TimeSpanConverter, добавленный в список JsonConverters.
Кстати, это происходит только при запуске этого кода в пакете VSIX. В автономном приложении все работает нормально.
Интересно, связано ли это с несколькими версиями загрузки и столкновения Newtonsoft.Json?
Есть идеи?
1 ответ
Я столкнулся с той же проблемой, но, наконец, решил ее, используя 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.