Добавление Iso8601TimeSpanConverter в список JsonConverter вызывает исключение ArrayTypeMismatch

Я использую AutoRest для автоматического создания класса С# для 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?

Любые идеи?


person VS.Php    schedule 06.09.2016    source источник
comment
Не могли бы вы отредактировать свой вопрос, включив в него полный ToString() вывод исключения, включая тип исключения, сообщение, внутреннее исключение и проследить?   -  person dbc    schedule 06.09.2016
comment
Я получил это исключение внутри WPF DesginMode! К сожалению, специального сообщения об исключении нет: System.ArrayTypeMismatchException occurred; HResult=-2146233085; Message=Attempted to access an element as a type incompatible with the array.; Source=mscorlib StackTrace: at System.Collections.Generic.List'1.Add(T item) at Client.WebApi.MyRestApi.Initialize()   -  person Marcel    schedule 30.11.2016


Ответы (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.

person JeromeZhao    schedule 03.03.2017
comment
в моем случае app.config генерировался автоматически во всех проектах при установке пакета newtonsoft. Но я все еще получаю эту ошибку (v11.0.2). - person Base; 02.11.2018
comment
Даже после объединения программного пакета newton я получаю эту ошибку. Любые другие подсказки? - person Rockstart; 02.01.2019