JSON から C#
内容はまだありません
無料オンラインJSONからC#ツール。APIレスポンスや設定JSONをワンクリックで、ASP.NET Core、Unity、Blazor、.NET MAUIプロジェクトで直接使用できる標準C#クラスに変換。[JsonProperty]アノテーション、Listジェネリック、Nullable<T>、ネストされたクラスの自動分割に対応、完全にブラウザローカルで生成します。
関連おすすめ
JSONからC#について:JSONデータをコンパイル可能なC# POCOクラスに変換する
JSONからC#は、JSON形式のデータ(オブジェクトまたは配列)をC#クラス定義(POCO、Plain Old CLR Object)に変換するプロセスです。C#は.NETエコシステムの主力言語であり、ASP.NET Coreバックエンド、Unityゲーム、.NET MAUIクロスプラットフォームアプリ、Blazor WebAssembly、デスクトップアプリ(WPF/WinForms)、Azureクラウドサービスなどのシナリオで広く使用されています。開発中、APIドキュメントや実際のレスポンスのJSONサンプルをC#型に変換する必要が頻繁にあります。手動でクラスを書くのは反復作業が多いだけでなく、フィールド型やアノテーションを書き間違えやすいため、本ツールはこのプロセスを自動化することを目標としています。
本ツールはquicktype-coreに基づいてブラウザローカルで実行され、C#レンダラーを使用して標準的なPOCOクラスコードを生成します。デフォルト出力にはusing System.Collections.Generic;と[JsonProperty("元のkey")]アノテーション(Newtonsoft.Json互換モード)が含まれ、Visual Studioで直接開いてコンパイルできます。これは単なる型ドラフトではなく、.NETプロジェクトに配置してNuGetパッケージと組み合わせればすぐに使用できるC#クラスです。
型推論はJSONからC#のコアです。ツールはJSONの基本型を.NET標準型にマッピングします:文字列 → string、整数 → long、浮動小数点数 → double、ブール値 → bool、配列 → List<T>、ネストされたオブジェクト → 独立したclass、null値 → Nullable<T>(例: long? / bool? / string?)。ネストされたオブジェクトについては、ツールは自動的に各階層に新しいclassを作成し、フィールド名の先頭大文字で命名します。例えばaddressフィールドはAddressクラスを生成し、items配列内のオブジェクトはItemクラスを生成します。
モダンC#構文との統合:本ツールはデフォルトでシリアライズ可能なPOCO(パブリック{ get; set; }プロパティ)を生成します。イミュータビリティを重視するプロジェクトでは、開発者はclassをC# 9+のrecord型に変更し、{ get; set; }をinit-onlyプロパティ(public string Name { get; init; })に変更できます。JsonSerializer.Deserialize<T>(jsonString)と組み合わせることで、コンパイル時にデータが変更されないことを保証できます。これはASP.NET Core 7+のMinimal API、Entity Framework Core 8+のイミュータブルエンティティ設計トレンドと一致しています。
JSONをサーバーにアップロードして処理する必要のある一部のオンラインツールとは異なり、本ツールのすべての計算はブラウザ内で完了します。quicktype-coreはWeb Workerを介してロードおよび実行され、JSON解析、型推論、C#コード生成、ファイルダウンロードはすべてローカルで行われ、いかなるサーバーにもデータを送信しません。これはAPIキー、ユーザープライバシーフィールド、未公開ビジネス構造を含むJSONにとって特に重要であり、ページを閉じるとデータはメモリから消去されます。
注意すべき点として、自動生成されるコードは出発点であり終着点ではありません。ツールはJSONサンプルに基づいて型を推論するため、ビジネス上の正確な型(例えばURL、Email、IDなどのセマンティック型はすべてstringと推論されます)を判断することはできません。snake_caseのJSONフィールドについては、C#フィールドはPascalCase命名(user_name → UserName)を維持しますが、[JsonProperty("user_name")]アノテーションは元のkeyを保持し、デシリアライズ時に自動的にマッピングされます。生成結果を最初のドラフトとして扱い、プロジェクト仕様に従ってフィールド名、型、属性を微調整することを推奨します。
ユースケース
- ASP.NET Core Web API:OpenAPI/SwaggerドキュメントのサンプルJSONをDTOクラスに変換、[FromBody]モデルバインディングと組み合わせてフロントエンドリクエストを受信
- ASP.NET Core MVC:フォーム/JSONリクエストボディを強く型付けされたModelに変換、ModelState自動検証と組み合わせて使用
- Newtonsoft.Jsonデシリアライズ:サードパーティインターフェースレスポンスJSONを[JsonProperty]付きPOCOクラスに変換、手動でのフィールドマッピングが不要
- System.Text.Json高性能シナリオ:JSONをrecord型またはinit-onlyプロパティに変換、JsonSerializer.Deserialize<T>と組み合わせて起動を高速化
- Unityゲームスクリプト:ネットワークAPIから返されるJSON(プレイヤーデータ、レベル設定、ショップアイテム、ランキング)をシリアライズ可能なScriptableObjectデータモデルに変換
- .NET MAUIクロスプラットフォームアプリ:バックエンドAPI JSONをModelクラスに変換、XAMLデータバインディングで使用、iOS/Android/Windows間でビジネスモデルを共有
- Blazor Server / WebAssembly:API JSONを強く型付けされたコンポーネントパラメータ/サーバーモデルに変換、@inject HttpClientと組み合わせてフロントエンド/バックエンド共有型を消費
- Entity Framework Core:データベースからエクスポートしたJSONドキュメントをエンティティクラスに変換、EF Coreモデルマイグレーションの参照基底クラスとして使用、[Key]/[Required]などのデータアノテーションと組み合わせ
- Azure Functions / AWS Lambda:Event Grid/SNS/API Gateway/Cosmos DBトリガーイベントのJSONを強く型付けされたイベントパラメータに変換、サーバーレス関数シグネチャを簡素化
- SignalRリアルタイム通信:サーバーからプッシュされるJSONメッセージ(チャット、通知、相場、IoTデータ)をC#型に変換、Hubメソッドで強く型付けして消費
- マイクロサービスインターフェース契約:サービス間RPC(gRPC-Web/HTTP/WCF)のJSONリクエスト/レスポンスサンプルをC#クラスに変換、複数チームで共有する契約定義として使用
- 設定ファイル読み込み:appsettings.jsonのサブ構造をOptionsパターンクラスに変換(例: MyOptions : IOptions<MyOptions>をIConfiguration.Bindと組み合わせて使用)
- テストデータ準備:JSONフィクスチャをC#クラスに変換後、Newtonsoft/System.Text.Jsonでデシリアライズしてユニットテストドリブン、xUnit/NUnit/MSTestと組み合わせて使用
- クローラーデータ解析:HtmlAgilityPack/AngleSharp/PuppeteerSharpで取得したJSONデータをC#クラスに変換、JObject動的アクセスによるフィールド漏れを回避
- APIドキュメント作成:Swagger/OpenAPIドキュメント、ReDoc、Knife4j、Swagger UIにC#クラスサンプルをschema定義として埋め込み、ドキュメントの可読性を向上
- コードレビューコラボレーション:APIレスポンスJSONを直接読みやすいPOCOに変換、Code Review時にフィールド命名、型選択、アノテーション使用について議論しやすく
- 古いプロジェクトリファクタリング:JObject/Dictionary<string, object>ベースの動的アクセスをPOCOベースの強く型付けされたアクセスにリファクタリング、コンパイル時型チェックと保守性を向上
- 教育とトレーニング:C#コース、.NET入門教育でサンプルJSONをPOCOに変換し、オブジェクト指向モデリング、プロパティアクセサ、シリアライゼーションの原理をデモンストレーション
使い方
- 左側のエディタにJSONコンテンツを貼り付けるか、アップロードボタンをクリックして.json/.txtファイルを選択するか、サンプルボタンをクリックして内蔵データを読み込みます
- 400ms待つと自動的に変換され、右側に生成されたC# POCOクラスコードが表示されます
- JSONフォーマットエラーがある場合は、「JSON修正」ボタンをクリックして一般的な構文問題を自動修正してから再変換します
- 「コピー」ボタンをクリックして単一クラスをクリップボードにコピーし、Visual Studio/Rider/VS Codeに貼り付けるか、「ダウンロード」をクリックして.csファイルとして保存します
特徴
- 純ブラウザローカル生成:JSON解析とC#コード生成はすべてJavaScript + quicktype-coreでブラウザ内で完了、入力データはいかなるサーバーにもアップロードされません
- POCO + record両対応:デフォルトでシリアライズ可能なPOCOクラスを生成、ワンクリックでC# 9+のrecord型に切り替え可能、モダン.NETコーディングスタイルにマッチ
- Newtonsoft [JsonProperty]アノテーション:各フィールドに自動的に[JsonProperty("元のkey")]を生成、Newtonsoft.Jsonのデフォルト動作と互換、PascalCaseフィールド名でもデシリアライズに影響なし
- ネストされたオブジェクトの自動分割:JSONのネストされたオブジェクトは再帰的に独立したC#クラスとして生成、フィールド名の先頭大文字で命名(例: address → Address)、型の重複を回避
- Listジェネリックの自動展開:JSON配列は自動的にList<T>に変換、Tは配列の最初の要素から自動推論(["a","b"] → List<string>、[{...}] → List<Item>)
- Nullable<T>の自動推論:JSON null値フィールドは自動的にNullable<T>としてマーク(例: long? / string? / bool?)、コンパイル時にnull参照例外を回避
- PascalCaseフィールド命名:snake_case入力は自動的にPascalCaseに変換(例: user_name → UserName)、同時に[JsonProperty]アノテーションは元のkeyを保持してデシリアライズ互換性を維持
- 多様な値型マッピング:string → string、integer → long、float → double、bool → bool、array → List<T>、null → Nullable<T>
- 完全な.csテンプレート:using System.Collections.Generic; + namespace + public class + フィールド + プロパティを含む標準C#ファイルを生成、直接コンパイル可能
- コピーとダウンロード:ワンクリックで単一クラスをクリップボードにコピー、または.csファイルとしてダウンロードしてVisual Studio / Rider / VS Codeに直接ドラッグ&ドロップ
- JSONエラーのワンクリック修正:末尾のカンマ、単一引用符、引用符の欠落などの一般的なフォーマットエラーを自動修正、修正成功後にC#コード生成を続行
- ローカル履歴:localStorageに基づいて最近の入力を自動保存、ページをリフレッシュまたは誤って閉じた後もすばやく復元して編集を続行可能
コード例
C#:Newtonsoft.Jsonで本ツールが生成したPOCOをデシリアライズ
csharpASP.NET Coreプロジェクトで最も一般的な使用法:本ツールが生成したPOCOをNewtonsoft.JsonでAPIレスポンスをデシリアライズ。
using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class ApiClient
{
private static readonly HttpClient _http = new HttpClient();
// 本ツールが生成したPOCO:
public class User
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("is_active")]
public bool? IsActive { get; set; }
}
public static async Task<User> GetUserAsync(int userId)
{
// 1) APIを呼び出してJSON文字列を取得
var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");
// 2) 本ツールが生成したPOCOにデシリアライズ
// 内部で[JsonProperty("id")]などのアノテーションに従ってsnake_case JSONを自動マッピング
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine($"User: {user.Name} ({user.Email})");
return user;
}
}C#:ASP.NET Core Controllerで本ツールが生成したPOCOを使用してリクエストを受信
csharp本ツールが生成したUser POCOをASP.NET Core Controllerに配置し、[FromBody]と組み合わせてフロントエンドJSONリクエストを自動受信。
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
// 本ツールが生成したPOCO(デフォルトでNewtonsoft [JsonProperty]を使用):
public class CreateOrderRequest
{
[Newtonsoft.Json.JsonProperty("user_id")]
public long UserId { get; set; }
[Newtonsoft.Json.JsonProperty("items")]
public List<OrderItem> Items { get; set; }
}
public class OrderItem
{
[Newtonsoft.Json.JsonProperty("product_id")]
public long ProductId { get; set; }
[Newtonsoft.Json.JsonProperty("quantity")]
public long Quantity { get; set; }
}
[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
[HttpPost]
public IActionResult Create([FromBody] CreateOrderRequest request)
{
if (request == null || request.Items == null || !request.Items.Any())
{
return BadRequest("Items cannot be empty");
}
// ビジネスロジック:注文を保存
// var order = OrderService.Create(request);
return Ok(new { order_id = 12345, status = "created" });
}
}
/*
* 対応する.csproj依存関係:
* <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
* <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
*/C#:HttpClient.GetFromJsonAsync + System.Text.Jsonでデシリアライズ
csharp.NET 5+/.NET 7+推奨の使用法:System.Text.Json組み込み拡張メソッド + record型を使用、[JsonPropertyName]アノテーションと組み合わせ。
using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
// 本ツールはデフォルトでPOCO classを生成;以下のように手動でrecord型(イミュータブルデータキャリア)に変更:
public record User
{
[JsonPropertyName("id")]
public long Id { get; init; }
[JsonPropertyName("name")]
public string Name { get; init; }
[JsonPropertyName("email")]
public string Email { get; init; }
[JsonPropertyName("is_active")]
public bool? IsActive { get; init; }
}
public class ApiClient
{
private static readonly HttpClient _http = new HttpClient();
public static async Task<User> GetUserAsync(int userId)
{
// System.Text.Json:GetFromJsonAsyncがHTTP + デシリアライズを1行で完了
var user = await _http.GetFromJsonAsync<User>(
$"https://api.example.com/users/{userId}");
System.Console.WriteLine($"User: {user.Name} ({user.Email})");
return user;
}
}
/*
* 対応する.csproj依存関係(System.Text.Jsonは組み込み、追加インストール不要):
* <TargetFramework>net7.0</TargetFramework>
*
* プロジェクトが.NET 7+で[JsonProperty]のNewtonsoft記法と互換性を持たせたい場合は、
* Program.csに以下を追加できます:
* builder.Services.AddControllers()
* .AddNewtonsoftJson(options =>
* {
* options.SerializerSettings.ContractResolver =
* new Newtonsoft.Json.Serialization.DefaultContractResolver();
* });
*/Best Practices
推奨:C# 8+ Nullable Reference Typesをデフォルトで有効にする
.csprojに<Nullable>enable</Nullable>を追加すると、本ツールが生成するstring? / List<User>?などのnull許容型が自動的にコンパイル時nullチェックを取得し、NullReferenceException実行時クラッシュを回避できます。
推奨:snake_case JSONとPascalCaseフィールド名を組み合わせる
本ツールはJSONフィールドを自動的にPascalCaseに変換し(例: user_name → UserName)、同時に[JsonProperty]アノテーションに元のkeyを保持します。これによりコードは.NET公式命名規則に準拠し、デシリアライズはJSONの元のkeyで動作し続けます。
推奨:複雑なネストJSONは複数のPOCOに分割してモデリング
ネストレベルが4層を超える場合は、ルートオブジェクトを複数の独立したPOCOに分割し、それぞれ異なるビジネス領域(例: UserDto / OrderDto / PaymentDto)を担当させることを推奨します。1つの巨大なクラスにすべてのフィールドを含めることを避け、保守性を向上させます。
推奨:DTOとEntityを分離する
本ツールで生成したPOCOをEF Core EntityとAPI DTOの両方として使用しないでください。推奨:①APIレイヤーはDTOを使用(JSONから生成);②EF CoreレイヤーはEntityを使用([Key]/[Required]などのデータアノテーションを手動で追加);③AutoMapper/MapsterでDTO ↔ Entityマッピングを行う。データベース構造をフロントエンドに直接露出することを避けます。
推奨:System.Text.Jsonプロジェクトは[JsonProperty]を[JsonPropertyName]に変更
プロジェクトでSystem.Text.Jsonを使用している場合は、IDEのグローバル置換で生成された[JsonProperty("xxx")]を[JsonPropertyName("xxx")]に変更することを推奨します。または元の[JsonProperty]を維持 + Microsoft.AspNetCore.Mvc.NewtonsoftJsonパッケージをインストールしてAddNewtonsoftJson()を呼び出し、Newtonsoft構文と互換性を持たせることもできます。
推奨:機密JSONは完全にローカルで処理
本ツールのすべての計算はブラウザローカルで完了しますが、企業内でさらに一層の防御を推奨します:①本番データベース接続文字列/APIマスターキーを含むJSONをいかなるオンラインツールにもコピーしない;②内部POCO生成はNSwagまたはVisual StudioのJSONをクラスとして貼り付けを使用して完全オフラインで生成することを推奨;③マスキング後のサンプルJSONに対してのみオンラインツールを使用する。
推奨:大きなJSONは分割して処理
1MBを超えるJSONはブラウザでのレンダリングが遅くなります。推奨:①複数の独立したPOCOクラス(例: User.cs / Address.cs / Order.cs)に分割してビジネスモジュール別に分類;②超大きなJSON Schema(100+フィールド)はNSwagまたはVisual Studio内蔵機能で直接生成;③本ツールは中小型APIレスポンス(< 100フィールド)の処理にのみ使用する。
推奨:classをrecordに置き換えてイミュータビリティを向上
変更する必要のないDTO/レスポンスモデルについては、生成されたclassをC# 9+のrecordに変更し、{ get; set; }を{ get; init; }に変更することを推奨します。これにより:①コンパイル時にデータが変更されないことを保証;②値等価性比較(Equals/GetHashCode)を自動的に取得;③with式と組み合わせてオブジェクトコピーを簡素化できます。
よくある質問
JSONをC#クラスに変換するにはどうすればよいですか?
左側の入力ボックスにJSONコンテンツを貼り付けると、ツールは400ms以内にquicktype-coreを介して自動的にC#クラスを生成し、右側に完全なコードを表示します。「アップロード」ボタンをクリックして.json / .txtファイルを選択するか、「サンプル」をクリックして内蔵データを読み込むこともできます。生成後、「コピー」ボタンをクリックして単一クラスをクリップボードにコピーするか、.csファイルとしてダウンロードできます。
生成されるC#コードには[JsonProperty]アノテーションが含まれますか?
含まれます。ツールはデフォルトでNewtonsoft.Json互換モードを使用し、各フィールドに[JsonProperty("元のkey")]属性を自動的に追加します。これにより、フィールド名がPascalCaseに変換されても、デシリアライズ時に元のJSONキーで正しくマッピングされます。System.Text.Jsonを使用している場合は、生成後に[JsonProperty]を[JsonPropertyName]に変更するか(セマンティクスは同じ)、System.Text.Jsonのデフォルト命名ポリシーを直接使用できます([JsonPropertyName]はSystem.Text.JsonでもカスタムJsonNamingPolicyで処理できます)。
POCOクラスとrecord型のどちらを生成できますか?
デフォルトではシリアライズ可能なPOCOクラス({ get; set; }プロパティを含む)を生成します。プロジェクトでC# 9+のrecord型(イミュータブルデータキャリア、DTO/イミュータブルモデルに適している)を使用している場合は、生成後に手動でclassをrecordに変更し、{ get; set; }をinit-onlyプロパティ(public string Name { get; init; })に変更できます。record型はASP.NET Core 7+のMinimal APIとEntity Framework Coreで広く使用されています。
どのようなJSONデータ構造をサポートしていますか?
すべての有効なJSON構造をサポートしています:基本型(null、boolean、number、string)、配列(1次元または多次元)、ネストされたオブジェクト(任意の深さ)。ルート入力はJSONオブジェクトまたはJSON配列のいずれでもかまいません。JSONオブジェクトはpublic class Rootを生成し、JSON配列はpublic class Root : List<Item>を生成します。JavaScript固有の値(関数、Symbol、undefined、Dateオブジェクトなど)はサポートしていません。
JSONフィールド型はC#型にどのようにマッピングされますか?
文字列 → string、整数 → long、浮動小数点数 → double、ブール値 → bool、配列 → List<T>、ネストされたオブジェクト → 独立したclass、null値フィールド → Nullable<T>(例: long? / bool? / string?)。詳細なマッピングルールはページ下部の「JSON型からC#型へのマッピング早見表」を参照してください。
nullフィールドは自動的にNullable<T>を生成しますか?
はい。ツールはJSONで明示的にnullまたは欠落しているフィールドを検出し、自動的にNullable<T>形式(例: long? Id { get; set; })として生成します。これはC# 8+で導入されたNullable Reference Types(NRT)機能と一致しており、コンパイラが静的解析時にnull参照リスクを発見するのに役立ちます。注意:NRTを有効にしている場合、参照型はデフォルトで非nullであり、null許容を表すには明示的にstring?と記述する必要があります。
配列はList<T>に変換されますか?
はい。JSON配列は統一的にC#のList<T>に変換され、要素型は配列の最初の要素から自動推論されます。文字列配列 → List<string>、整数配列 → List<long>、オブジェクト配列 → List<Item>。空配列[]は要素型を推論できないため、デフォルトでList<object>を生成します。生成後、手動で具体的な型(例: List<MyClass>)に変更することを推奨します。T[]配列構文が好みの場合は、生成後にIDEの検索と置換で一括置換できます。
ネストされたオブジェクトはどのように処理されますか?
ツールは各ネストされたオブジェクトに対して独立したC#クラスを生成します。命名規則はフィールド名の先頭大文字です(例: address → Address)。ルートオブジェクトにitems配列が含まれ、要素がオブジェクトの場合は、public class Itemクラスを生成し、public List<Item> Items { get; set; }で参照します。同じ構造のオブジェクトは同じ型を再利用し、重複定義を回避します。
生成されるクラス名と名前空間をカスタマイズできますか?
はい。quicktype-coreはデフォルトでJSONソース名(例: Root)をルートクラス名として使用します。生成後に手動でクラス名、namespace、すべての参照箇所を変更できます。ダウンロードする.csファイル名も保存時に必要に応じて名前変更できます(例: User.cs、Order.csに変更)。
生成されたコードは直接.NETプロジェクトに配置して使用できますか?
直接使用できます。生成されるファイルは標準C#構文で、using System.Collections.Generic;参照を含みます。.csファイルを.NETプロジェクトのルートディレクトリまたはサブディレクトリに配置すると、.csprojに追加の依存関係を追加する必要はありません(System.Text.Jsonは.NETに組み込まれています;Newtonsoft.JsonはNuGet経由でMicrosoft.AspNetCore.Mvc.NewtonsoftJsonまたはNewtonsoft.Jsonパッケージをインストールする必要があります)。その後、JsonConvert.DeserializeObject<T>(jsonString)またはJsonSerializer.Deserialize<T>(jsonString)でデシリアライズできます。
データはサーバーにアップロードされますか?
完全にブラウザローカルで実行されます。JSON解析、C#コード生成、ファイルダウンロードはすべてJavaScript + WebAssemblyでブラウザ内で完了します。入力されたJSONデータと生成されたC#コードはいかなるサーバーにもアップロードされず、クラウドに記録またはキャッシュされることもありません。APIキー、トークン、未公開ビジネスフィールドを含む機密JSONも安心して使用でき、ページを閉じると消去されます。
登録やログインは必要ですか?
必要ありません。ツールは完全に無料で、登録、ログイン、認可は不要です。ページを開くとすぐに使用でき、すべての機能がブラウザローカルで利用可能です。
JSONフォーマットエラーが発生した場合はどうすればよいですか?
ツールはJSONの正当性を自動的に検出し、エラー時には右側に赤いエラーメッセージを表示し、「JSON修正」ボタンを提供します。クリックすると一般的なエラーを自動修正できます:末尾の余分なカンマ、単一引用符から二重引用符への置換、引用符のないkeyへの引用符補完、コメントの削除など。修正成功後はC#コード生成を続行します。
Newtonsoft.JsonとSystem.Text.Jsonのどちらが優れていますか?
両方とも.NETエコシステムで最も主流なJSONライブラリです。Newtonsoft.Json(Json.NETとも呼ばれる)は歴史が最も古く、エコシステムが最も豊富なライブラリで、ほぼすべての.NETプロジェクトと互換性があります;System.Text.Jsonは.NET Core 3.0+に組み込まれた高性能ライブラリで、起動が速く、メモリ使用量が少なく、AOTフレンドリーです。ASP.NET Core 3.0+はデフォルトでSystem.Text.Jsonを使用します;古い.NET Frameworkプロジェクトと多くのサードパーティライブラリはデフォルトでNewtonsoft.Jsonに依存します。本ツールはデフォルトで[JsonProperty]を生成して両方と互換性を持たせています(System.Text.Jsonは.NET 7+でNewtonsoft互換パッケージMicrosoft.AspNetCore.Mvc.NewtonsoftJsonもサポートしています)。
JSONからJava、JSONからRustとの違いは何ですか?
3つともJSONをターゲット言語の型定義に変換しますが、出力形式が異なります:JSONからC#は[JsonProperty]アノテーション付きのPOCOクラスを生成し、Newtonsoft.JsonまたはSystem.Text.Jsonと組み合わせて直接デシリアライズ可能;JSONからJavaはLombok/Gson/Jacksonアノテーション付きのPOJOを生成;JSONからRustはSerde derive付きのstructを生成します。3つが重視するエコシステムは異なり、選択はあなたの技術スタックに依存します。
DateTimeフィールドを含むクラスを生成してデシリアライズに失敗する場合はどうすればよいですか?
System.Text.JsonはデフォルトでstringとDateTimeの自動変換をサポートしておらず、JsonExceptionをスローします。2つの解決策:①フィールドに[JsonConverter(typeof(DateTimeConverter))]カスタムコンバーターを追加;②Program.csでグローバルJsonSerializerOptionsを設定:options.PropertyNameCaseInsensitive = true;し、カスタムJsonConverterでDateTimeを処理。Newtonsoft.JsonはデフォルトでDateTimeデシリアライズをサポートしていますが、特殊な形式(Unixタイムスタンプなど)の場合はカスタムconverterが必要です。
なぜ生成されるクラスにnamespaceがないのですか?
ツールがデフォルトでnamespaceを生成しないのは、コードスニペットの最大の互換性を維持し、ユーザーが任意のプロジェクトにコピーして使用しやすくするためです。namespaceが必要な場合は、生成後のコードの先頭に手動でnamespace YourApp.Models;を追加し、クラスを対応する.csファイルに配置できます。.NETプロジェクトでは機能モジュールごとにnamespaceを整理することを推奨します(例: Models / Dtos / ViewModels / Entities)。
Visual Studioでワンクリックでクラスとして貼り付けることはできますか?
Visual Studio 2019+には「形式を選択して貼り付け → JSONをクラスとして貼り付け」機能が内蔵されています(編集メニュー → 形式を選択して貼り付け)、JSONを直接C#クラスに変換できます。本ツールで生成されるコードはこの機能と互換性があります:ツールで生成したC#コードをクリップボードにコピーした後、任意の.csファイルに貼り付けて使用できます。VS内蔵機能が好みの場合は、本ツールを開かずに直接編集 → 形式を選択して貼り付け → JSONをクラスとして貼り付けを使用できます。
トラブルシューティング
「JSONデータを入力してください」と表示されるか右側が空
左側の入力ボックスが空であるか、空白文字のみが含まれています。有効なJSONコンテンツが貼り付けられていることを確認するか、アップロードボタンをクリックして.json/.txtファイルを選択してください。サンプルボタンをクリックして内蔵サンプルを読み込むこともできます。
JSON解析失敗と表示される
一般的な原因:末尾に余分なカンマがある(例: {"a":1,})、二重引用符の代わりに単一引用符を使用している、keyが二重引用符で囲まれていない、JavaScriptコメントが含まれている。「JSON修正」ボタンをクリックすると一部のエラーを自動修正できます;それでも失敗する場合は、まずJSONフォーマッターツールで検証してください。
生成されるフィールド型が十分に正確でない
ツールはJSONサンプルに基づいて型を推論するため、例えばすべての整数はlong、すべての文字列はstringになります。int/decimal/Guid/DateTimeなどのより正確な型が必要な場合は、生成後に手動でフィールド型を変更してください。System.Text.JsonはデフォルトでDateTimeをサポートしていないことに注意、[JsonConverter]でカスタマイズする必要があります。
nullフィールドがNullable<T>を生成するが、プロジェクトでNullable Reference Typesが有効になっていない
ツールはデフォルトでC# 8+のNullable Reference Types形式で生成します(例: string? / List<User>?)。プロジェクトが古いバージョンの.NET Framework/NRTが有効でない場合、すべての参照型はデフォルトでnull許容であり、string?の?は直接削除できます(または.csprojで<Nullable>enable</Nullable>を有効にできます)。
コンパイル時にNewtonsoft.Json依存関係が見つからないと表示される
.csprojに以下のPackageReferenceを追加してください: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 次にdotnet restoreを実行すると、NuGetが自動的にダウンロードします。System.Text.Jsonを使用する場合はインストール不要です(.NETに組み込まれています)。
snake_case JSONフィールドとPascalCaseフィールド名が一致しない
ツールはJSONフィールド名を自動的にPascalCaseに変換し(例: user_name → UserName)、同時に[JsonProperty]アノテーションに元のkeyを保持します。Newtonsoft.Jsonはデシリアライズ時に[JsonProperty]に従ってマッピングするため、手動で処理する必要はありません。System.Text.Jsonのデフォルト命名ポリシーを使用する場合は、[JsonProperty]を[JsonPropertyName]に変更するか、Program.csでCamelCase命名ポリシーを設定する必要があります。
ダウンロードした.csファイルがプロジェクトでコンパイルエラーになる
考えられる原因:①.csprojにNewtonsoft.Json/System.Text.Json依存関係が追加されていない;②クラスが不適切なディレクトリに配置されている(.NETプロジェクトのルートディレクトリまたはサブディレクトリに配置し、対応するnamespaceにする必要があります);③クラス名がプロジェクト内の他の型と競合している。解決方法:依存関係を追加、ディレクトリとnamespaceを調整、競合するクラスの名前を変更。
ASP.NET CoreでJSON受信時に「Cannot deserialize」エラーが発生する
ASP.NET Core 3.0+はデフォルトでSystem.Text.Jsonを使用しますが、ツールが生成する[JsonProperty]はNewtonsoft.Json構文です。2つの解決策:①.csprojにMicrosoft.AspNetCore.Mvc.NewtonsoftJsonパッケージを追加し、Program.csでAddNewtonsoftJson()を呼び出す;②生成された[JsonProperty("xxx")]をすべて[JsonPropertyName("xxx")](System.Text.Json構文)に変更する。
配列が数値型なのにList<object>が生成される
通常、配列が空[]の場合にデフォルトでList<object>と推論されます。元のJSONに少なくとも1つのサンプル要素(例: [1,2,3])を追加すると、ツールは最初の要素に基づいて型を推論します;または生成後に手動でList<object>をList<long>/List<int>に変更してください。
超大きなJSON変換時にページがフリーズする
JSONを複数の独立したモジュールに分割してそれぞれ変換するか、モデリングが必要な部分のみを抽出することを推奨します。ブラウザが多数のネストされたクラスをレンダリングする際に多くのメモリを消費するため、5MBを超えるJSONはNSwag/Visual Studio内蔵の「JSONをクラスとして貼り付け」機能の使用を推奨します。
用語集
- POCO (Plain Old CLR Object)
- C#/.NETにおける「普通のCLRオブジェクト」の略称で、制約は:パブリックデフォルトコンストラクタ + プライベートフィールド + パブリック{ get; set; }プロパティ + フレームワーク非依存。本ツールが生成するのは標準POCOです。
- record
- C# 9+で導入されたイミュータブルデータキャリア型で、参照等価性ではなく値等価性を使用します。本ツールで生成後に手動でrecordに変更でき、DTO、APIレスポンスモデル、イミュータブル設定などのシナリオに適しています。
- [JsonProperty]
- Newtonsoft.Jsonのフィールドマッピング属性。本ツールはデフォルトで各フィールドに[JsonProperty("元のkey")]を追加し、PascalCaseフィールド名がsnake_case JSONを正しくデシリアライズできるようにします。
- Newtonsoft.Json
- Json.NETとも呼ばれ、.NETエコシステムで最も人気のあるJSONライブラリ。エコシステムが最も豊富で互換性が最も高く、ほぼすべての.NETプロジェクトでサポートされています。ASP.NET Core 3.0以前はデフォルトで使用され、3.0以降はSystem.Text.Jsonに変更されましたが、NuGetパッケージを介して引き続き互換性があります。
- System.Text.Json
- .NET Core 3.0+に組み込まれた高性能JSONライブラリ。起動が速く、メモリ使用量が少なく、AOTフレンドリーです。機能には[JsonPropertyName](Newtonsoftの[JsonProperty]に対応)とJsonNamingPolicyカスタム命名ポリシーが含まれます。
- Nullable<T>
- C#で値型がnull許容であることを表す形式(例: long? / bool?)。本ツールはJSON nullフィールドを自動的にNullable<T>と推論し、コンパイル時にnull参照例外を回避します。
- List<T>
- .NETコレクションフレームワークのジェネリックリスト型。本ツールはJSON配列を自動的にList<T>に変換し、Tは配列の最初の要素から自動推論されます(例: ["a"] → List<string>)。
- namespace
- C#でクラスを整理するための名前空間キーワードで、Javaのpackageに似ています。本ツールが生成するコードはデフォルトでnamespaceがなく、手動で追加できます(例: namespace MyApp.Models)。
- ASP.NET Core
- マイクロソフトのオープンソースクロスプラットフォームWebフレームワーク。本ツールで生成されるPOCOクラスは、ASP.NET CoreのController [FromBody]モデルバインディング、Minimal API、Blazorコンポーネントパラメータなどのシナリオで直接使用できます。
- Unity
- 世界で最も人気のあるゲームエンジンで、スクリプト言語としてC#を使用しています。本ツールで生成されるPOCOクラスは、UnityネットワークAPIレスポンス解析、ScriptableObject設定データモデリングに使用できます。
- Snake_case → PascalCase
- フィールド命名規則の変換。snake_case命名(例: user_name、created_at)をPascalCase命名(例: UserName、CreatedAt)に変換し、.NET公式命名規則に準拠します。
- quicktype-core
- 本ツールが基盤として依存するオープンソース多言語JSON型生成ライブラリ(quicktypeプロジェクト)。C#、Java、TypeScript、Rust、Go、Swiftなど10以上の言語をサポートし、TypeScript + WebAssemblyに基づいてブラウザで実行されます。
- .NET MAUI
- マイクロソフトのクロスプラットフォームUIフレームワーク(.NET Multi-platform App UI)。C#コードはiOS/Android/Windows/macOSで共有できます。本ツールで生成されるPOCOは、MAUI XAMLデータバインディングのModelとして適しています。
- Blazor
- マイクロソフトのWebAssemblyベースのSPAフレームワークで、ServerとWebAssemblyの2つのモードがあります。本ツールで生成されるC#クラスは、Blazorコンポーネントパラメータ、強く型付けされたAPIレスポンスモデルに使用でき、単一言語フルスタック開発効率を向上させます。
- HttpClient.GetFromJsonAsync
- .NET 5+/System.Net.Http.Json拡張メソッド。HTTP GET + JSONデシリアライズを1行で完了します。本ツールで生成されるPOCOと組み合わせることで、HTTP APIクライアントコードを大幅に簡素化できます。
- JsonNamingPolicy
- System.Text.JsonでJSONフィールド名とC#プロパティ名のマッピングポリシーを制御するためのクラス(例: CamelCase、SnakeCaseLower)。Newtonsoft.Jsonは[JsonProperty]アノテーションまたはContractResolverで実現します。
- IOptions<T>
- .NET Optionsパターンのコアインターフェース。appsettings.jsonのサブ構造を強く型付けされたクラスにバインドします。本ツールで生成されるPOCOはIConfiguration.Bindと組み合わせてIOptions<T>の実装として直接使用できます。
JSON型からC#型へのマッピング早見表
ツールはJSON値の型に基づいて対応するC#/.NET型を自動的に推論します:
| JSON値の例 | 生成されるC#型 | Nullable形式 | 説明 |
|---|---|---|---|
null | コンテキストに基づいて推論 | T? | null値フィールドは自動的にNullable<T>として推論されます(例: long? / bool? / string?) |
true / false | bool | bool? | JSONブール値は直接C# boolにマッピング |
42 | long | long? | JSON整数はデフォルトでlong(64ビット整数、大きな数と互換)にマッピング |
3.14 | double | double? | JSON浮動小数点数はデフォルトでdouble(倍精度浮動小数点数)にマッピング |
"hello" | string | string? | JSON文字列はC# stringにマッピング |
["a","b"] | List<string> | List<string>? | 文字列配列はList<string>にマッピング |
[1,2,3] | List<long> | List<long>? | 整数配列はList<long>にマッピング |
[{...},{...}] | List<Item> | List<Item>? | オブジェクト配列は最初の要素から対応するclassを生成し、Listでラップ |
[] | List<object> | List<object>? | 空配列は要素型を推論できないためobjectでフォールバック、生成後に具体的な型に変更することを推奨 |
{...} ネストされたオブジェクト | 独立したclass | ClassName? | ネストされたオブジェクトは独立したclassを生成、フィールド名の先頭大文字で命名(address → Address) |
Newtonsoft.JsonとSystem.Text.Jsonアノテーション対比表
.NETエコシステムの2大主流JSONライブラリのフィールドマッピング属性対比。本ツールはデフォルトでNewtonsoft互換の[JsonProperty]を生成します:
| 比較項目 | Newtonsoft.Json | System.Text.Json |
|---|---|---|
フィールドマッピング属性 | [JsonProperty("user_name")] | [JsonPropertyName("user_name")] |
デフォルト命名ポリシー | PascalCaseフィールド名を維持(snake_case互換には[JsonProperty]が必要) | 元のフィールド名を維持(JSONキーでマッチング、CamelCaseがデフォルト) |
カスタム命名 | [JsonProperty]でフィールドごとに指定 | [JsonPropertyName] + JsonNamingPolicyグローバル設定 |
null値処理 | NullValueHandling.Ignore / Include | JsonIgnoreCondition.WhenWritingNull |
デフォルト.NETバージョン | .NET Framework / .NET Core / .NET 5+ | .NET Core 3.0+ / .NET 5+ |
インストール方法 | NuGet: Newtonsoft.Json | 組み込み(インストール不要) |
パフォーマンス | 中 | 高(起動が速く、メモリ使用量が少ない) |
AOTサポート | source generatorが必要 | ネイティブサポート |
適用シナリオ | 古い.NETプロジェクト、サードパーティライブラリ依存、エコシステムが豊富 | ASP.NET Core 3.0+、高性能シナリオ、.NET MAUI / Blazor |
Privacy & Security
本JSONからC#ツールのすべての操作は完全にあなたのブラウザローカルで完了します:JSON解析、C#コード生成、ファイルダウンロードはすべてブラウザのJavaScript + WebAssembly(quicktype-core)を介してクライアント側で実行され、ネットワークを介していかなるサーバーにもJSONコンテンツ、アップロードされたファイル、または生成されたコードを送信しません。ファイルアップロードはブラウザのネイティブFileReader APIを使用して直接メモリに読み込み、いかなる中間サービスも経由しません。Cookieトラッキングは使用せず、ユーザー入力データや使用状況データを一切収集しません。ページを閉じるかリフレッシュすると、すべての入力と出力コンテンツは自動的にメモリから消去されます。APIキー、トークン、機密ビジネスデータを含むJSONの処理に適しています。
Authoritative References
- MicrosoftMicrosoft Learn - C#プログラミングガイド
- MicrosoftMicrosoft Learn - System.Text.Jsonの概要
- NewtonsoftNewtonsoft.Json公式ドキュメント
- MicrosoftMicrosoft Learn - ASP.NET Core Web APIモデルバインディング
- MicrosoftMicrosoft Learn - C# 9 record型
- JSON 圧縮
- CSV to JSON
- JSON から CSV
- JSON Diff
- JSON Escape / Unescape
- JSONフラット化
- JSON フォーマッター
- JSON 生成
- JSONPath オンラインクエリ
- JSON マージ
- JSON 修復
- JSON Schema バリデーター
- JSONソート
- JSON Stringify
- JSONをHTMLに変換
- JSONからJavaへ
- JSON から Markdown
- JSON を SQL に変換
- JSON から TOML へ変換
- JSONをTypeScriptに変換
- XML を JSON に変換
- JSONをXMLへ変換
- YAML を JSON に変換
- JSON → YAML 変換
- JSON から Go へ
- JSON から Rust
- JSON から Swift
- JSON から C#
- JSON から C++
- JSON を PHP に
- JSON から Python