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> 的属性。
- 定义将实例序列化为空 JSON 对象的IAsyncEnumerable<T>。