Добавление 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.

Другие вопросы по тегам