将Iso8601TimeSpanConverter添加到JsonConverter列表会抛出ArrayTypeMisma
本文关键字:ArrayTypeMisma 列表 JsonConverter Iso8601TimeSpanConverter 添加 | 更新日期: 2023-09-27 18:05:42
我正在使用AutoRest从Swagger定义文件中自动生成REST API的c#类。
问题是,当执行客户端类初始化方法时,它会在以下代码中抛出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加载和碰撞?
任何想法?
我遇到了同样的问题,但最终通过使用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上使用的版本。