.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 Core 3.0 より前のバージョンのフレームワークでは、System.Text.Json NuGet パッケージをインストールします。 このパッケージで以下がサポートされます。
- .NET Standard 2.0 以降
- .NET Framework 4.6.2 以降
- .NET 8 以降
名前空間と API
- System.Text.Json 名前空間には、すべてのエントリ ポイントと主要な型が含まれています。
- System.Text.Json.Serialization 名前空間には、シリアル化と逆シリアル化に固有の高度なシナリオとカスタマイズのための属性と API が含まれています。
- System.Net.Http.Json 名前空間には、ネットワーク から JSON ペイロードをシリアル化および逆シリアル化するための拡張メソッドが含まれています。
重要
System.Text.Json
では、以前に使用した可能性のある次のシリアル化 API はサポートされていません。
- System.Runtime.Serialization 名前空間の属性。
- System.SerializableAttribute 属性とISerializable インターフェイス。 これらの型は、バイナリシリアル化と XML シリアル化 にのみ使用されます。
リフレクションとソース生成
既定では、System.Text.Json
ではリフレクションを使用して、実行時にシリアル化と逆シリアル化のためにオブジェクトのプロパティにアクセスする目的で必要なメタデータを収集します。 別の方法として、System.Text.Json
では、C# のソース生成機能を使用して、パフォーマンスを向上させ、プライベート メモリの使用量を削減し、アセンブリのトリミングを容易にすることができます。これにより、アプリのサイズが小さくなります。
詳細については、「リフレクションとソース生成」を参照してください。
セキュリティ情報
JsonSerializer の設計時に考慮されたセキュリティ上の脅威と、その脅威を軽減する方法については、「System.Text.Json
脅威モデル」を参照してください。
スレッド セーフ
System.Text.Json
シリアライザーは、スレッド セーフを考慮して設計されています。 実際には、これは、ロックされると JsonSerializerOptions インスタンスを複数のスレッド間で安全に共有できることを意味します。 JsonDocument は、JSON 値に対して不変の、そして .NET 8 以降のバージョンではスレッド セーフな DOM 表現を提供します。
その他のリソース
.NET