

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
system.text.jsonとは?基本のアイデア
system.text.jsonは、Microsoftが提供する .NET 用の JSON シリアライザです。正式には System.Text.Json という名前で組み込まれており、軽量で高速なデータの読み書きに向いています。このライブラリは、従来から使われてきた Newtonsoft.Json(別名 Json.Net)と比べて、標準搭載の利点が多いのが特徴です。
なぜ System.Text.Json が注目されたのか
.NET Core 3.0 以降、System.Text.Json は標準ライブラリとして提供され、従来の Newtonsoft.Json に比べて 高速性、メモリの省約、アプリサイズの小ささ が評価されています。特に大量のデータを頻繁にシリアライズ/デシリアライズするアプリでは有利です。
使い方の基本イメージ
オブジェクトを JSON に変換するには、JsonSerializer クラスを使います。例えば、任意のオブジェクトを Serialize することで文字列を得られ、逆に Deserialize でオブジェクトに戻します。ここで注意したいのは、デフォルト設定ではプロパティ名が キャメルケース になる点です。もしサーバーと同じ形式でプロパティ名を使いたい場合は、設定を調整する必要があります。
JsonSerializerOptions の役割
JsonSerializerOptions はオプションを集めた設定クラスです。ここで PropertyNamingPolicy、IgnoreNullValues などを設定できます。実務では、API の仕様に合わせてこのオプションを選ぶことが多いです。
よくある違いと注意点
主な違いとして、処理の速度とデフォルトの挙動、および既存コードとの互換性があります。 Newtonsoft.Json は機能が豊富で細かなカスタマイズがしやすい一方、System.Text.Json は「軽量で標準搭載」という利点があります。複雑なポリシー(例:循環参照の扱い、日付のフォーマット指定)を多く求める場合は Newtonsoft.Json を併用するケースもあります。
実務でのポイント
実践的には、Dto(データ転送用のオブジェクト)を用意して、JsonSerializerOptions で命名規則や無効値の扱いを統一するのがコツです。日付や時刻は ISO 8601 形式をデフォルトで使うことが多く、タイムゾーンの扱いにも注意が必要です。
比較表
| 項目 | System.Text.Json |
|---|---|
| 主な用途 | データのシリアライズ/デシリアライズ、API通信のデータ処理 |
| デフォルト挙動 | プロパティ名は CamelCase に変換されることが多い。日付のフォーマットは ISO 8601 が基本 |
| 長所 | 標準搭載、高速性・低メモリ、依存性が少ない |
| 短所 | 機能が Newtonsoft.Json より限定的な場面がある。高度なカスタマイズには別ライブラリが必要なことも |
まとめ
system.text.json は .NET の現代的な JSON 処理の基盤として欠かせない存在です。小さく速い実装を求める場面で真価を発揮します。導入時は JsonSerializerOptions を活用して、命名規則や null 値の扱いを自分のアプリに合わせて調整しましょう。
system.text.jsonの同意語
- System.Text.Json
- NET の標準的な JSON 処理ライブラリ。オブジェクトと JSON の変換(シリアライズ/デシリアライズ)を高速に行える。
- System.Text.Json 名前空間
- System.Text.Json に含まれる API が集約されている名前空間。JsonSerializer、JsonDocument などが含まれる。
- JsonSerializer
- JSON のシリアライズとデシリアライズの中心的なクラス。オブジェクトと JSON の相互変換を担う。
- JsonSerializerOptions
- シリアライズ/デシリアライズ時の挙動を細かく設定するオプションの集まり。
- JsonElement
- 読み取り専用の JSON 値を表す構造体。JSON の要素にアクセスする際に使う。
- JsonDocument
- JSON 全体を DOM 的に扱い、読み取りと探索を行う API。
- Utf8JsonWriter
- UTF-8 形式で JSON を高性能に出力するライタークラス。
- Utf8JsonReader
- UTF-8 形式の JSON を段階的に読み取るリーダークラス。
- JsonNamingPolicy
- JSON のプロパティ名の命名方針を定義する基底クラス(例: CamelCase)。
- JsonNamingPolicy.CamelCase
- CamelCase(キャメルケース)を適用する具体的な命名方針。
- JsonPropertyNameAttribute
- C# のプロパティ名を JSON 側の名前として指定する属性。
- JsonIgnoreAttribute
- 特定のプロパティを JSON に含めないようにする属性。
- JsonIgnoreCondition
- JsonSerializerOptions.DefaultIgnoreCondition などで使われる、無視する条件の列挙型。
- DefaultIgnoreCondition
- JsonSerializerOptions の設定項目。null 値やデフォルト値を JSON に含める/含めないを決定する。
- WriteIndented
- true に設定すると、出力される JSON に改行とインデントが追加され、見やすくなる設定。
- JsonCommentHandling
- JSON 内のコメントを許可するかどうかを指定する設定。
- JsonEncodedText
- 事前にエンコード済みのテキストを表す値型。キー名などの再利用時に有効。
- JsonException
- System.Text.Json の操作中に発生する例外の型。エラー処理に使う。
- JsonSerializer.Serialize
- オブジェクトを JSON 文字列へ変換する処理。
- JsonSerializer.Deserialize
- JSON 文字列をオブジェクトへ変換する処理。
system.text.jsonの対義語・反対語
- Newtonsoft.Json (Json.NET)
- System.Text.Jsonの主要な対抗ライブラリ。長年の実績と豊富な機能が特徴で、カスタムコンバーターや日付処理、柔軟な設定などが利点。ただし最新のSystem.Text.Jsonほどのデフォルト高性能性には時として及ばない場合があります。
- XML
- JSONの対になるデータ表現。タグと属性で階層と意味を表現できる反面、データ量が多く冗長になりやすい点がデメリットです。
- YAML
- 人間に読みやすい階層表現のフォーマット。可読性は高い一方でパース処理が複雑になりがちで、実装の安定性はライブラリ依存です。
- BSON
- バイナリ版のJSON風フォーマット。人間には読めませんが、サイズが小さく速い伝送・保存が可能です。
- MessagePack
- 軽量なバイナリ形式のシリアライズ。JSONよりコンパクトで高速なデータ伝送を狙えます。
- Protobuf (Protocol Buffers)
- Googleが開発したスキーマ必須のバイナリシリアライズ。小型・高速な点が魅力ですが、柔軟性はJSONより低く、前提となるスキーマ定義が必要です。
- CSV
- 表形式のテキストデータ。階層的なデータ表現には不向きで、ネストをそのまま表現することは難しいです。
- 手動パース(Manual JSON Parsing)
- ライブラリを使わず自分でJSONを解析・生成する方法。自由度は高いですが、エスケープ処理やネストの管理などバグが起きやすく、初心者には推奨されません。
- XMLシリアライゼーション
- XMLを用いたデータのシリアライズ・デシリアライズを指します。データ構造を表現する柔軟性はあるものの、JSONと比べて冗長性が高く扱いが複雑になることが多いです。
- CBOR
- Concise Binary Object Representation の略で、JSON相当のデータを二進表現で、さらにコンパクトに表現します。人間には読みにくいが、通信量を抑えたい場面に適しています。
system.text.jsonの共起語
- System.Text.Json
- .NET の標準ライブラリとして提供される高性能な JSON 処理ライブラリ。
- JsonSerializer
- オブジェクトと JSON のシリアライズ/デシリアライズを行う中心クラス。
- JsonSerializerOptions
- JsonSerializer の挙動を細かく設定するオプションクラス。
- Deserialize
- JSON 文字列を .NET オブジェクトに変換する処理。
- Serialize
- .NET オブジェクトを JSON 文字列へ変換する処理。
- DeserializeAsync
- ストリームから非同期にデシリアライズする機能。
- SerializeAsync
- ストリームへ非同期にシリアライズする機能。
- JsonDocument
- JSON を読み取り専用で解析するドキュメントモデル。
- JsonElement
- JsonDocument 内の個々の JSON 値を表す構造体。
- JsonNode
- 動的に JSON を操作できるノード系 API の基盤。
- JsonObject
- JSON オブジェクトを表すノード。
- JsonArray
- JSON 配列を表すノード。
- JsonValue
- JsonNode の一種で、原始値を表すノード。
- JsonPropertyName
- 出力時のキー名を指定する属性。
- JsonPropertyNameAttribute
- JsonPropertyName を適用する属性クラス。
- JsonInclude
- 読み取り専用プロパティをシリアライズ対象に含める属性。
- JsonIgnore
- 特定のプロパティをシリアライズ/デシリアライズ対象から除外する属性。
- JsonIgnoreCondition
- JsonIgnore の適用条件を指定する列挙型(Never/WhenWritingDefault/Always など)。
- JsonConverter
- カスタム変換を追加するためのコンバータの基底クラス。
- JsonConverterAttribute
- 特定のプロパティにカスタムコンバータを適用する属性。
- JsonConverterFactory
- 複数の型に適用可能な自動生成コンバータのファクトリ。
- JsonNumberHandling
- 数値の取り扱いを制御する設定(例:文字列として扱う)。
- JsonNamingPolicy
- 命名ポリシーの基底クラス(CamelCase などを提供)。
- CamelCase
- プロパティ名をキャメルケースに変換する命名ポリシー。
- PropertyNamingPolicy
- JsonSerializerOptions に設定する命名ポリシーの総称。
- PropertyNameCaseInsensitive
- JSON のプロパティ名を大/小文字を区別せず照合する設定。
- DefaultIgnoreCondition
- null 値の扱いを制御するデフォルト条件。
- Utf8JsonReader
- UTF-8 文字列を高速に読み取る低レベルリーダー。
- Utf8JsonWriter
- UTF-8 文字列を高速に書き出す低レベルライター。
- JsonTokenType
- JSON トークンの種類を表す列挙型。
- JsonException
- JSON 処理時のエラーを表す例外クラス。
- JsonReaderOptions
- 低レベル読み取り時の設定(末尾のカンマの許容・コメント等)。
- JsonDocumentOptions
- JsonDocument の解析オプション(必要な場合)。
- System.Text.Json.Serialization
- 属性・契約表現を提供するサブネームスペース。
- System.Text.Json.Nodes
- JsonNode 系の動的 JSON API を提供するサブネームスペース。
- POCO
- Plain Old CLR Object の略。データモデルを表す通常のクラス。
system.text.jsonの関連用語
- System.Text.Json
- .NETの公式JSONライブラリ。高速なシリアライズ/デシリアライズを提供し、軽量でパフォーマンス重視の用途に適しています。
- JsonSerializer
- オブジェクトとJSONの相互変換を担当する基本機能。Serializeで文字列化、Deserializeでオブジェクトへ変換します。
- JsonSerializerOptions
- JsonSerializerの挙動を細かく制御する設定クラス。命名規則・インデント・カスタムコンバーターの登録などを行います。
- JsonDocument
- 読み取り専用のJSON DOM。大規模なJSONを効率的に解析して部分要素へアクセスできます。
- JsonElement
- JsonDocument内の1つの値を表す型。値の型取得や値の取得などに使用します。
- Utf8JsonReader
- ストリーミング形式の高速読み取りAPI。大容量のJSONを段階的に処理するのに適しています。
- Utf8JsonWriter
- ストリーミング形式の高速書き込みAPI。順次JSONを生成する場面で使用します。
- JsonTokenType
- Utf8JsonReaderが返すトークンの種類を表す列挙型。開始/終了オブジェクト・配列、値などを区別します。
- JsonValueKind
- JsonElementが扱う値の種類を表す列挙型。Object、Array、String、Number、True、False、Nullなどを表します。
- JsonNode
- System.Text.Json.NodesのDOM風API。JsonObject、JsonArray、JsonValueを使ってJSON木を編集できます。
- JsonObject
- JsonNode系のJSONオブジェクトを表すクラス。キーと値のペアを保持します。
- JsonArray
- JsonNode系のJSON配列を表すクラス。複数の値を順序付きで保持します。
- JsonEncodedText
- 頻繁に使われる文字列をエンコード済みとして保持する最適化クラス。高頻度文字列操作に有用です。
- JsonConverter
- 特定の型とJSONの変換を自分で定義するための拡張クラス。カスタム変換を実装します。
- JsonConverterT
- 特定の型Tに対するカスタムコンバーターを作成するジェネリック版。型安全に実装できます。
- JsonConverterFactory
- 複数の型に対応可能なカスタムコンバーターを作る際の基盤クラスです。
- JsonPropertyName
- プロパティ名をJSONのキー名として指定する属性。JSONのキー名を自由に設定できます。
- JsonIgnore
- 特定のプロパティをシリアライズ/デシリアライズの対象から除外する属性です。条件付き除外も指定できます。
- JsonInclude
- 通常は公開されていないメンバーをシリアライズ対象に含めるための属性です。
- JsonPropertyOrder
- JSONの出力順序を制御する属性。出力されるプロパティの順番を指定できます。
- JsonNamingPolicy
- 命名規則を定義する基底クラス。CamelCase等のポリシーを適用できます。
- JsonNamingPolicy CamelCase
- CamelCaseに自動変換する命名規則。プロパティ名をキャメルケースでJSONキーにします。
- DictionaryKeyPolicy
- ディクショナリのキー名の命名規則を設定します。キーをどうJSON化するかを制御します。
- PropertyNamingPolicy
- JsonSerializerOptionsで全体の命名方針を設定します。例: CamelCase の適用。
- PropertyNameCaseInsensitive
- デシリアライズ時にプロパティ名の大文字小文字を区別せずに一致させます。
- WriteIndented
- 出力するJSONをインデント付きで整形します。人間が読みやすくなります。
- AllowTrailingCommas
- 末尾のカンマを許容するオプション。仕様上は不正だが緩和したい場合に使用します。
- ReadCommentHandling
- JSON内のコメントの取り扱いを指定します(Allow/Skip/Disallow)。
- JsonNumberHandling
- 数値の取り扱いをカスタマイズする設定。文字列として読む・書くなどのオプションがあります。
- ReferenceHandler
- オブジェクト参照情報を保持して循環参照を扱えるようにする機能。Preserveを使う場面が多いです。
- JsonSerializerContext
- ソース生成を利用して高速・型安全なシリアライザを提供するコンテキストです。
- JsonSerializableAttribute
- JsonSerializerContextでシリアライズ対象の型を指定する属性です。
- JsonSourceGenerationContext
- ソース生成を利用する際のコンテキストクラス。生成コードを活用してパフォーマンスを向上させます。
- JsonDerivedTypeAttribute
- 多相/ポリモーフィックなシリアライズ時に派生型を指定する属性です。
- JsonException
- JSONの解析・シリアライズ中に発生する例外。エラーメッセージで原因を特定します。



















