JSONからC#クラスへ

JSONのサンプルを貼り付けると、.csファイルにそのまま貼り込めるC#のPOCOクラスが得られます。適切な型を選び、追加のクラス定義を伴うネストされたオブジェクトを処理し、null許容参照型に対応し、プロジェクトに応じてSystem.Text.JsonまたはNewtonsoft.Jsonの属性を出力します。

JSONをC#に変換する方法

  1. 1

    JSONを貼り付ける

    サンプルは1つで十分です。複数のサンプルを与えると、null許容性や配列要素の型の推論が向上します。

  2. 2

    スタイルを選ぶ

    System.Text.Json(.NET 6以降)またはNewtonsoft.Json(レガシー)。camelCaseのJSONには、PascalCaseのプロパティ名に`[JsonPropertyName]`を付与します。

  3. 3

    対象のC#バージョンを選ぶ

    レコードやファイルスコープの名前空間にはC# 10以降、null許容参照型にはC# 8、最大限の互換性を確保する場合はそれ以前のバージョンを選びます。

  4. 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
整数 intint.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の設計を見直すのが望ましいです。

関連ツール

このツールは他の言語でも利用できます