3

我正在使用 AutoRest 从 Swagger 定义文件中为 REST API 自动生成 ac# 类。

问题是在执行客户端类初始化方法时,它会在以下代码中抛出 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()
        }
}

有问题的代码是添加到 JsonConverters 列表中的 Iso8601TimeSpanConverter。

顺便说一句,这只发生在在 VSIX 包中运行此代码时。在独立应用程序上,它运行良好。

我想知道它是否与多个版本的 Newtonsoft.Json 加载和碰撞有关?

有任何想法吗?

4

1 回答 1

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 上使用的版本不同。

于 2017-03-03T22:30:04.153 回答