JSONからC#クラスへ
JSONのサンプルを貼り付けると、.csファイルにそのまま貼り込めるC#のPOCOクラスが得られます。適切な型を選び、追加のクラス定義を伴うネストされたオブジェクトを処理し、null許容参照型に対応し、プロジェクトに応じてSystem.Text.JsonまたはNewtonsoft.Jsonの属性を出力します。
JSONをC#に変換する方法
-
1
JSONを貼り付ける
サンプルは1つで十分です。複数のサンプルを与えると、null許容性や配列要素の型の推論が向上します。
-
2
スタイルを選ぶ
System.Text.Json(.NET 6以降)またはNewtonsoft.Json(レガシー)。camelCaseのJSONには、PascalCaseのプロパティ名に`[JsonPropertyName]`を付与します。
-
3
対象のC#バージョンを選ぶ
レコードやファイルスコープの名前空間にはC# 10以降、null許容参照型にはC# 8、最大限の互換性を確保する場合はそれ以前のバージョンを選びます。
-
4
クラスをコピーする
1つのルートクラスに加え、各オブジェクトの形状ごとにネストされたクラスが生成され、すべてが1つのファイルにまとまり、そのままプロジェクトに取り込めます。
出力例
次の入力に対して:
{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }
System.Text.Jsonの出力(C# 10以降):
public class User
{
[JsonPropertyName("firstName")]
public string FirstName { get; set; } = default!;
[JsonPropertyName("age")]
public int Age { get; set; }
[JsonPropertyName("emails")]
public List<string> Emails { get; set; } = new();
[JsonPropertyName("address")]
public Address Address { get; set; } = default!;
}
public class Address
{
[JsonPropertyName("city")]
public string City { get; set; } = default!;
}
型のマッピング
| JSON | C#の型 |
|---|---|
| 文字列 | string |
| 整数 | int(int.MaxValueを超える場合はlong) |
| 数値(小数) | double(指定した場合はdecimal) |
| 真偽値 | bool |
| null | object?(または同階層の要素と統合) |
| ISO-8601形式の日付 | DateTime(またはDateOnly) |
| GUID形式の文字列 | Guid |
| 文字列の配列 | List<string> |
| オブジェクト | ネストされたクラス |
属性のオプション
- System.Text.Json(
[JsonPropertyName("foo")]). NET 6以降および新規プロジェクトに推奨されます。 - Newtonsoft.Json(
[JsonProperty("foo")])、レガシープロジェクトや、Newtonsoft固有の機能が必要な場合に使用します。 - なし、プロパティ名がJSONのキーと完全に一致します(JSONのキーが既にPascalCaseの場合にのみ有効です)。
よくある間違い
- オーバーフローの可能性があるフィールドに
intを使う。 JSONにint.MaxValueを超える値が含まれる場合はlongを使います。ジェネレーターは大きな値を検出すると自動的に昇格します。 - 計算プロパティに
[JsonIgnore]を付け忘れる。 生成されたクラスにヘルパープロパティを追加する場合は[JsonIgnore]を付けてください。付けないと出力時にシリアライズされてしまいます。 - カルチャー非依存のパースを忘れる。
decimalフィールドはCultureInfo.InvariantCultureでデシリアライズすべきです。System.Text.Jsonは既定でこれを行い、Newtonsoftはグローバル設定で行います。 - 1つのサンプルだけでジェネレーターを信頼する。 null許容性や配列要素の型は、与えられたデータから推測されます。null許容の注釈は、必ず実際のAPIの挙動と照らし合わせて確認してください。
よくある質問
.NET 6以降の新規プロジェクトではSystem.Text.Jsonを使いましょう。高速で標準搭載されており、現在ではNewtonsoftのほぼすべての機能に対応しています。レガシープロジェクトや、Newtonsoft固有の機能(カスタムのコントラクトリゾルバー、JObject、動的処理など)が必要な場合はNewtonsoftを使ってください。
C# 10以降では、イミュータブルなDTOにはレコードが慣用的です。値の等価性と簡潔な構文が得られます。変更可能性が必要な場合やレガシー互換性が求められる場合はクラスの方が適しています。このツールではどちらも選択できます。
プロジェクトがnull許容参照型(C# 8以降)を使用している場合、いずれかのサンプルでnullが観測されたフィールドはstring?、int?などになります。null許容参照型を使わない場合、null許容性は値型(例:int?)にのみ示されます。
異なるオブジェクト形状が混在する配列は、強く型付けされたC#では直接表現できません。このツールは共通の基底クラスを推論するか、(フォールバックとして)objectを用います。混在配列の場合は、通常JSONの設計を見直すのが望ましいです。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
JavaScript圧縮ツール
変数名のリネーム、空白の削除、デッドコードの除去、定数畳み込みでJavaScriptを圧縮し、より小さなバンドルを作成します。
メールアドレス検証ツール
メールアドレスを検証します。RFC 5322構文チェック、MXレコードのライブ確認に加え、ローカル部、ドメイン、長さの詳細を表示します。メールは送信されません。
EditorConfig ジェネレーター
インデントのスタイルとサイズ、改行コード、文字コード、空白ルールを指定して .editorconfig ファイルを生成し、IDE やエディタをまたいで書式を統一できます。
このツールは他の言語でも利用できます
- Từ JSON đến lớp C# [VI]
- JSON a Clase C# [ES]
- JSON para Classe C# [PT]
- JSON till C#-klass [SV]
- تحويل JSON إلى فئة C# [AR]
- JSON ถึงคลาสใน C# [TH]
- JSON zu C# Klasse [DE]
- JSON을 C# 클래스로 [KO]
- JSON naar C#-klasse [NL]
- JSON vers classe C# [FR]
- JSON ke Kelas C# [ID]
- JSON na klasę C# [PL]
- 从 JSON 到 C# 类 [ZH]
- JSON to C# Class [EN]
- JSON in classe C# [IT]
- JSON в класс C# [RU]
- JSON'ten C# Sınıfına [TR]