JSON to C# クラス — JSON から C# モデルクラスを生成
JSON から C# モデルクラスを生成します。PascalCase プロパティ、null 許容型、JsonPropertyName 属性に対応。ブラウザで動作 — アップロード不要、制限なし。
JSON to C# Class
Convert JSON to C# model class with System.Text.Json attributes. Works entirely in your browser.
C# は .NET ランタイム上で二十年にわたりエンタープライズソフトウェアの言語であり、JSON も Web API の共通言語としてほぼ同じ長さの歴史があります。この 2 つの間にある摩擦は、常にインピーダンスミスマチでした。C# は静的に型付けされ、JSON は動的に型付けされ、その橋渡しとなるデシリアライザは、データの形状を前もって把握しておく必要があります。すべての API レスポンスに対して C# のクラスを手書きするのは反復的で間違いやすく、API が変更されたときに真っ先に同期がずれる部分です。サンプルの JSON レスポンスからクラスを生成することが標準的な解決策であり、生成されたクラスは次の API 変更によって再生成が必要になるまで、单一の信頼できる情報源として機能します。
C# のクラス生成において「あまり自明ではない」点は命名規則です。JSON のキーは通常 snake_case(user_id、created_at)で、C# のプロパティは PascalCase(UserId、CreatedAt)です。生成器はこの大文字小文字の変換を自動で行い、C# の規約に沿ったプロパティを出力します。必要に応じて [JsonPropertyName] 属性を付与し、デシリアライズ時に元の JSON キーを保持することもできます。デフォルトでは属性を出力せず、デシリアライザの大文字小文字を区別しないマッチングに依存します — クライアント側とサーバー側の両方を制御できる新規コードに適しています。属性を出力するモードは、レガシーコードベースや snake_case のキーを一貫して使う API に適しています。
最後に受け渡しについて補足します。行き先が ASP.NET Web API コントローラであれば、生成されたクラスを Models フォルダに貼り付け、JSON で返回させてやれば、往の回はデシリアライザが処理します。行き先がデスクトップアプリやモバイルアプリであれば、ソース API の厳密な大文字小文字に合わせるために [JsonPropertyName] 属性を追加してください。行き先が Blazor や Razor Pages のアプリであれば、生成されたクラスはそのままページの @model ディレクティブのモデルとして使用できます。生成されたクラスはあくまで出発点であり、コードベースが成熟するにつれて検証属性、XML ドキュメントコメント、ビジネスロジックのメソッドを追加してください。
使い方
JSON を貼り付ける
JSON オブジェクト、または JSON オブジェクトの配列を入力欄にドロップします。生成器は構造を走査し、ルートに対して C# クラスを、各オブジェクト形状に対してネストされたクラスを出力します。
出力オプションを選択する
class(public プロパティを持つ可変 POCO)と record(不変の C# 9+ record、init-only セッター)のいずれかを選択できます。`<Nullable>enable</Nullable>` を有効化したプロジェクトに合わせて、null 許容参照型を切り替えることもできます。
クラスをコピーまたはダウンロードする
生成された C# をクリップボードにコピーするか、.cs ファイルとしてダウンロードできます。出力は System.Text.Json および Newtonsoft.Json のデシリアライザにそのまま貼り付けて使えます — 基本的な利用では追加の属性は不要です。
よくある質問
出力は System.Text.Json でそのまま使えますか?
はい — デフォルトでは、生成器は PascalCase プロパティを持つクラスを出力し、System.Text.Json のデフォルトのデシリアライズと一致します。「JsonPropertyName 属性」を有効化すると、snake_case の JSON キーに対して PascalCase の C# プロパティを使うプロジェクト向けに `[JsonPropertyName("original_key")]` を出力します。
ネストされたオブジェクトはどのように処理されますか?
ネストされたオブジェクトは、JSON キーから派生した PascalCase の名前を持つネストクラスになります。JSON の `user.profile.name` というパスは、`Profile` 型の `Profile` プロパティを持つ `User` クラスと、`Name` string プロパティを持つ `Profile` クラスになります。任意の深さの深い入れ子構造も同じように処理されます。
JSON 配列はどう扱われますか?
JSON 配列は C# の `List<T>` プロパティに変換されます。T は推論された要素型です。オブジェクトの配列は `List<NestedClass>` に、文字列の配列は `List<string>` に、混合型の配列は `List<object>` になります。生成器はファイルの先頭に `using System.Collections.Generic;` を出力します。
record と class のどちらを生成しますか?
デフォルトは、public プロパティとパラメーターレスコンストラクタを持つ class です。「record」を有効化すると、C# 9+ の位置指定 record または init-only record が出力されます。これらは不変で、`with` 式と組み合わせて使用できます。record には .NET 5+ または .NET Standard 2.1+ が必要です。
null 値はどのように処理されますか?
デフォルトでは、プロジェクトで null 許容参照型が有効化されている場合、すべての参照型プロパティは null 許容(`string?`、`int?` など)として出力されます。null 許容参照型を有効化していないプロジェクトでは、すべてのプロパティが非 null 許容になります — コンストラクタでデフォルト値を割り当てるか、デシリアライザ側でデフォルト値処理を実装してください。
制限事項
- 推論された型は検証されません生成器はサンプルデータから型を推論します。サンプルでは文字列として現れるフィールドが、実際には enum、日付、または制約付き整数である場合があります。生成された C# は推論された型をそのまま使用するため、出力を確認し、enum、`DateTime` 変換、範囲属性などを手動で追加してください。
- System.Text.Json ソースジェネレータには対応していません出力はリフレクションベースのデシリアライザで動作する POCO クラスです。新しいソースジェネレータ(System.Text.Json の `JsonSerializerContext`)は異なるコード形状を必要とするため、出力対象外です。ソースジェネレータとの互換性が必要な場合は、出力を後処理して context クラスを追加してください。
- XML ドキュメントは含まれません生成されたクラスには XML ドキュメントコメントが含まれていません。手動で `///` のサマリーを追加するか、ドキュメント生成器で出力を後処理し、IntelliSense に親切なクラスにしてください。
プラットフォーム別の注意点
- macOS
- Visual Studio for Mac、Rider、C# 拡張機能を入れた VS Code であれば、生成されたクラスをそのまま扱えます。IDE を起動するほどのセットアップ時間をかけたくない、ワンショットでの生成にはブラウザツールが適しています。
- Windows
- Visual Studio と Rider のどちらも、生成されたクラスをそのまま扱えます。サンプル API レスポンスからワンショットで型を生成したい場合や、チャットやメールから貼り付けた内容を C# クラスにしたい場合には、ブラウザツールが適しています。
- Linux
- コマンドラインで同様のことを行う場合は、`quicktype --lang csharp` が標準的な代替手段です。Node と quicktype をインストールするほどのセットアップ時間をかけたくない、ワンショットでの生成にはブラウザツールが適しています。
- Web
- 完全にクライアントサイドで動作します。ページの読み込みが完了すればオフラインでも動作します。コマンドラインツールや .NET SDK が利用できない制限環境でも有用です。