JSON to C# クラス変換

JSONからC#クラスを自動生成

サンプルを試す
ルートクラス名:

JSON入力

C#出力

ローカルで実行 · シークレットの貼り付けも安全
C#クラスがここに表示されます…

JSONからC#への変換とは?

JSONからC#への変換とは、JSONデータから強力に型付けされたC#クラス定義を生成するプロセスです。.NETアプリケーションがAPIやコンフィグファイル、メッセージキューからJSONを受け取る場合、そのデータをオブジェクトに逆シリアル化するためのC#クラスが必要です。JSONにネストされたオブジェクト・配列・混在型が含まれる場合、これらのクラスを手書きするのは手間がかかりミスが起きやすい作業です。

JSONからC#クラスへの生成ツールは、JSONの構造と値を検査し、各フィールドに適切なC#型を推論し、プロパティアクセサーとシリアライゼーション属性を持つクラス定義を出力します。出力は.NETの命名規則に従います:PascalCaseのプロパティ名、元のcamelCaseまたはsnake_case形式のJSONキーへのマッピング用JsonPropertyName属性、そして配列に対するList'<'T'>'の正しい使用です。

この変換はASP.NET Core Web API、Azure Functions、および外部JSONデータを利用するあらゆる.NETサービスで特によく使われます。dynamicやDictionary'<'string, object'>'を使う代わりに、型付きクラスを使うことでコンパイル時の安全性、IntelliSenseサポート、そして実行時にしか発覚しないフィールド名のタイポへの対策が得られます。このツールにJSONを貼り付ければ、すぐに使えるC#クラスを即座に取得できます。

JSONからC#の生成ツールを使う理由

JSONサンプルからC#モデルクラスを手書きするには時間がかかり、人為的なミスが生じます。生成ツールが繰り返し作業を担うことで、ビジネスロジックに集中できます。

即座にクラスを生成
JSONを貼り付けるだけで、1秒以内に完全なC#クラスが得られます。プロパティを手動で入力する必要も、フィールドを書き忘れる心配もありません。
🔒
プライバシーを優先した処理
すべての変換はブラウザ上で実行されます。JSONデータがマシンの外に出ることはないため、APIキー・トークン・個人情報は安全に保たれます。
📋
正確な属性マッピング
生成されたクラスにはJsonPropertyName属性が含まれており、PascalCaseのC#プロパティと元のJSONキー名をマッピングし、逆シリアル化の不一致を防ぎます。
🌐
アカウント・インストール不要
ページを開いてJSONを貼り付けるだけです。NuGetパッケージのインストールも、Visual Studioの拡張機能の設定も、サインアップフォームも一切不要です。

JSONからC#への変換ユースケース

バックエンドAPIインテグレーション
サードパーティREST API向けのリクエスト・レスポンスモデルを生成します。APIドキュメントのサンプルJSONを貼り付けて、HttpClient呼び出し用のC#クラスをすぐに取得できます。
ASP.NET Core コントローラー
アクションメソッドのパラメーター用モデルクラスを作成します。エンドポイントがJSONボディを受け取る場合、生成されたクラスにより自動モデルバインディングとバリデーションが利用できます。
Azure Functions とサーバーレス
キュー・イベントハブ・HTTPトリガーからのJSONメッセージを処理するAzure Functionsの入出力バインディングを構築します。
コンフィグの逆シリアル化
appsettings.jsonのセクションや外部コンフィグファイルを、依存性注入でIOptions'<'T'>'と共に使用する型付きC#オプションクラスに変換します。
データベースシーディングとマイグレーション
JSONフィクスチャファイルをEntity Frameworkのシードデータ・インテグレーションテストのセットアップ・データマイグレーションスクリプト用のC#オブジェクトに変換します。
C#型システムの学習
学生や.NET初心者の開発者は、JSONの型がC#の型にどのようにマッピングされるかを確認し、プロパティアクセサーを理解し、シリアライゼーション属性について実例から学べます。

JSONからC#への型マッピング早見表

各JSONの値型は特定のC#型に対応します。生成ツールは実際の値を分析して最も適切な型を選択します。たとえば、小数点のないJSON数値はintになり、3.14はdoubleになります。null値は実際の型をnullだけから推論できないため、object?(nullable参照型)になります。

JSON型値の例C#型
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
object{"key": "value"}nested class
array[1, 2, 3]List<int>
array of objects[{"id": 1}]List<ClassName>

System.Text.Json と Newtonsoft.Json

.NETには2つの主要なJSONシリアライゼーションライブラリがあります。このツールが生成するクラスはSystem.Text.Json属性(JsonPropertyName)を使用します。これは.NET Core 3.0から組み込まれている選択肢です。プロジェクトがNewtonsoft.Jsonを使用している場合は属性を差し替えることができます。

System.Text.Json
.NET Core 3.0から組み込み。Newtonsoftより高速でメモリ割り当てが少ない。プロパティマッピングに[JsonPropertyName]を使用。.NET 6+の新規プロジェクトにおける標準的な選択肢。JsonPathや参照ハンドリングなど一部のNewtonsoft機能は標準では非対応。
Newtonsoft.Json
.NETの元祖JSONライブラリ(Json.NET)。プロパティマッピングに[JsonProperty]を使用。ポリモーフィックなシリアライゼーション・JsonPathクエリ・柔軟なカスタムコンバーターなど高度なシナリオをサポート。System.Text.Jsonにない機能が必要な既存のコードベースやプロジェクトで今も広く使われている。

コード例

以下の例では、JSONから生成したC#クラスの定義と使用方法を、2つの主要なシリアライゼーションライブラリを使って示します。加えて、コマンドラインから生成を自動化する方法も紹介します。

C# (System.Text.Json)
using System.Text.Json;

var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"

public class User
{
    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("active")]
    public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;

var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98

public class User
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("scores")]
    public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs

// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp

// Output:
// public class Root
// {
//     [JsonPropertyName("id")]
//     public int Id { get; set; }
//
//     [JsonPropertyName("name")]
//     public string Name { get; set; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

よくある質問

JsonPropertyNameとJsonPropertyの違いは何ですか?
JsonPropertyNameはSystem.Text.Jsonの属性で、.NETに組み込まれたシリアライザーのものです。JsonPropertyはサードパーティライブラリであるNewtonsoft.Json(Json.NET)の属性です。どちらもC#プロパティ名をJSONフィールド名にマッピングしますが、異なる名前空間に属しており互換性はありません。.NET 6+の新規プロジェクトにはJsonPropertyNameを使用し、すでにNewtonsoftに依存しているプロジェクトにはJsonPropertyを使用してください。
生成ツールはネストされたJSONオブジェクトをどのように処理しますか?
ネストされたオブジェクトはそれぞれ独自のC#クラスになります。親クラスのプロパティはネストされたクラスを型として使用します。たとえば、"street"と"city"を持つオブジェクトを含む"address"フィールドがJSONにある場合、生成ツールはAddressクラスを作成し、親クラスのプロパティの型をAddressとします。
混在型を含むJSON配列はどうなりますか?
生成ツールはnullでない最初の要素から配列の要素型を推論します。配列に混在型(文字列と数値が混在するなど)が含まれる場合、生成される型はList'<'object'>'にフォールバックします。実際には、適切に設計されたAPIレスポンスが単一の配列内で型を混在させることはほとんどありません。
生成されたクラスをEntity Frameworkで使用できますか?
はい。ただし、[Key]・[Required]・[Column]などのEF固有のアノテーションを追加する必要があります。生成されたクラスはプロパティ構造を提供するものです。スキャフォールドとして扱い、その上にEFの設定を追加してください。EFはパラメーターなしのコンストラクターも要求しますが、生成されたクラスにはデフォルトで既に存在しています。
JSONのnull値はC#でどのように変換されますか?
JSONのnull値はobject?型になります。nullだけでは意図する型を判断できないためです。生成後は、APIスキーマに関する知識に基づいて、object?を正しいnullable型(string?、int?、または特定のクラス?)に置き換えてください。
camelCaseのJSONはPascalCaseのC#プロパティに自動マッピングされますか?
はい。生成ツールは"firstName"のようなJSONキーをFirstNameのようなPascalCaseプロパティに変換し、[JsonPropertyName("firstName")]属性を追加します。これにより、シリアライゼーションと逆シリアル化の際に2つの命名規則間のマッピングがシリアライザーによって自動的に行われます。
C#でオプションフィールドを持つJSONをどのように扱いますか?
プロパティの型をnullable(例:string?またはint?)にしてデフォルト値を設定します。System.Text.Jsonを使用する場合は、JsonSerializerOptions.DefaultIgnoreConditionを設定してシリアライゼーション時にnull値をスキップすることもできます。生成ツールはデフォルトで非nullable型を出力するため、APIコントラクトに基づいてnullabilityを確認・調整してください。