System.Text.Json IAsyncEnumerable 序列化
System.Text.Json 现支持 IAsyncEnumerable<T> 实例的序列化和反序列化。
旧行为
在以前的版本中,System.Text.Json 将 IAsyncEnumerable<T> 实例序列化为了空 JSON 对象 ({}
)。 由于 JsonException,反序列化失败。
新行为
异步序列化方法现在在对象图中枚举任何 IAsyncEnumerable<T> 实例,然后将其序列化为 JSON 阵列。 同步序列化方法不支持 IAsyncEnumerable<T> 序列化,并引发 NotSupportedException。
引入的版本
.NET 6
中断性变更的类型
此项更改可能会影响源兼容性。 如果重新以 .NET 6 为目标,则不会出现任何编译时错误,但可能会遇到运行时序列化行为差异。
更改原因
引入此更改是为了添加对在 ASP.NET Core MVC 中流式处理 IAsyncEnumerable<T> 响应的支持。
建议操作
检查序列化模型是否包含实现 IAsyncEnumerable<T> 的类型,并确定是否需要在 JSON 输出中发出列举。 可以通过以下方式之一来禁用 IAsyncEnumerable<T> 序列化:
- 将 JsonIgnoreAttribute 附加到包含 IAsyncEnumerable<T> 的属性。
- 定义将 IAsyncEnumerable<T> 实例序列化为空 JSON 对象的自定义转换器工厂。