System.Text.Json IAsyncEnumerable のシリアル化
System.Text.Json で、IAsyncEnumerable<T> インスタンスのシリアル化と逆シリアル化がサポートされるようになりました。
以前の動作
以前のバージョンでは、IAsyncEnumerable<T> インスタンスは System.Text.Json によって空の JSON オブジェクト ({}
) としてシリアル化されていました。 逆シリアル化は、JsonException で失敗していました。
新しい動作
非同期シリアル化メソッドでは、オブジェクト グラフ内の IAsyncEnumerable<T> インスタンスが列挙された後、それらが JSON 配列としてシリアル化されるようになりました。 同期シリアル化メソッドでは IAsyncEnumerable<T> のシリアル化はサポートされず、NotSupportedException がスローされます。
導入されたバージョン
.NET 6
破壊的変更の種類
この変更はソースの互換性に影響を与える可能性があります。 .NET 6 以降をターゲットとして再設定した場合、コンパイル時のエラーは発生しませんが、実行時のシリアル化の動作が異なることがあります。
変更理由
この変更は、ASP.NET Core MVC での IAsyncEnumerable<T> 応答のストリーミングのサポートを追加するために導入されました。
推奨アクション
シリアル化モデルに IAsyncEnumerable<T> を実装する型が含まれているかどうかを確認し、JSON 出力で列挙型を出力することが望ましいかどうかを確認します。 次のいずれかの方法で IAsyncEnumerable<T> のシリアル化を無効にできます。
- IAsyncEnumerable<T> を格納するプロパティに JsonIgnoreAttribute をアタッチします。
- IAsyncEnumerable<T> インスタンスを空の JSON オブジェクトとしてシリアル化するカスタム コンバーター ファクトリを定義します。
影響を受ける API
関連項目
.NET