.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 はスレッド セーフではありません。

その他の技術情報