.NET での JSON のシリアル化と逆シリアル化 (マーシャリングとマーシャリング解除) - 概要
System.Text.Json
名前空間は、JavaScript Object Notation (JSON) との間でのシリアル化と逆シリアル化の機能を提供します。 "シリアル化" は、オブジェクトの状態 (つまり、そのプロパティの値) を格納または送信できる形式に変換するプロセスです。 シリアル化された形式には、オブジェクトに関連付けられているメソッドに関する情報は含まれません。 "逆シリアル化" では、シリアル化された形式からオブジェクトを再構築します。
System.Text.Json
ライブラリの設計では、ハイ パフォーマンスと、高度な豊富なセットに対する少ないメモリ割り当てが強調されています。 組み込みの UTF-8 サポートによって、UTF-8 としてエンコードされた JSON テキストの読み取りと書き込みのプロセスが最適化されます。これは、web 上のデータおよびディスク上のファイルのための最も一般的なエンコードです。
ライブラリには、メモリ内のドキュメント オブジェクト モデル (DOM) を操作するためのクラスも用意されています。 この機能により、JSON ファイルまたは文字列内の要素へのランダム アクセスが可能になります。
Visual Basic コードから使用できるライブラリの部分には、いくつかの制限があります。 詳細については、「Visual Basic のサポート」をご覧ください。
ライブラリの入手方法
ライブラリは、.NET Core 3.0 以降のバージョン用の共有フレームワークの一部として組み込まれています。 ソース生成機能は、.NET 6 以降のバージョン用の共有フレームワークの一部として組み込まれています。 ソース生成を使用するには、.NET 5 SDK 以降が必要です。
.NET Core 3.0 より前のバージョンのフレームワークでは、System.Text.Json NuGet パッケージをインストールします。 このパッケージで以下がサポートされます。
- .NET Standard 2.0 以降
- .NET Framework 4.7.2 以降
- .NET Core 2.1 以降
- .NET 5 以降
ランタイム リフレクションとコンパイル時のソース生成の比較
既定では、System.Text.Json
では "ランタイムに" リフレクションを使用して、シリアル化と逆シリアル化のためにオブジェクトのプロパティにアクセスする目的で必要なメタデータを収集します。 別の方法として、System.Text.Json
では、C# のソース生成機能を使用して、パフォーマンスを向上させ、プライベート メモリの使用量を削減し、アセンブリのトリミングを容易にすることができます。これにより、アプリのサイズが小さくなります。 詳細については、「System.Text.Json でリフレクションまたはソース生成を選択する方法」を参照してください。
セキュリティ情報
JsonSerializer の設計時に考慮されたセキュリティ上の脅威と、その脅威を軽減する方法については、「System.Text.Json
脅威モデル」を参照してください。
スレッド セーフ
System.Text.Json
シリアライザーは、スレッド セーフを考慮して設計されています。 実際には、これは、ロックされると JsonSerializerOptions インスタンスを複数のスレッド間で安全に共有できることを意味します。
JsonDocument は、JSON 値の不変でスレッド セーフな DOM 表現を提供するように設計されています。 ただし、コンカレンシーのバグのため、現在、JsonDocument
はスレッド セーフではありません。
その他の技術情報
- ライブラリを使用する方法
- JsonSerializerOptions インスタンスのインスタンスを作成する
- 大文字と小文字を区別しない一致を有効にする
- プロパティの名前と値をカスタマイズする
- プロパティを無視する
- 必須のプロパティ
- 無効な JSON を許可する
- オーバーフロー JSON を処理するか、JsonElement または JsonNode を使用する
- 参照を保持し、循環参照を処理する
- 変更できない型と非パブリック アクセサーに逆シリアル化する
- ポリモーフィックなシリアル化
- Newtonsoft.Json から System.Text.Json に移行する
- 文字エンコードをカスタマイズする
- DOM、Utf8JsonReader、Utf8JsonWriter を使用する
- JSON シリアル化のためのカスタム コンバーターの作成
- DateTime および DateTimeOffset のサポート
- ソース生成を使用する方法
- サポートされているコレクション型
- System.Text.Json API リファレンス
- System.Text.Json.Serialization API リファレンス