JSON轉C#
暫無內容
免費線上JSON轉C#工具。將API回應或組態JSON一鍵轉成標準C#類別,直接用於ASP.NET Core、Unity、Blazor、.NET MAUI專案。支援[JsonProperty]註解、List泛型、Nullable<T>、巢狀類別自動拆解,完全瀏覽器本機生成。
暫無內容
免費線上JSON轉C#工具。將API回應或組態JSON一鍵轉成標準C#類別,直接用於ASP.NET Core、Unity、Blazor、.NET MAUI專案。支援[JsonProperty]註解、List泛型、Nullable<T>、巢狀類別自動拆解,完全瀏覽器本機生成。
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]註解會保留原始key,反序列化時自動對應。建議將生成結果當作第一版草稿,再依專案規範微調欄位名稱、型別、特性。
ASP.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;
}
}將本工具生成的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" />
*/.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 + 反序列化
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();
* });
*/在.csproj中加入<Nullable>enable</Nullable>,本工具生成的string? / List<User>?等可空型別會自動獲得編譯期空值檢查,避免NullReferenceException執行期崩潰。
本工具自動將JSON欄位轉為PascalCase(例如user_name → UserName),同時[JsonProperty]註解保留原始key,確保程式碼符合.NET官方命名規範,反序列化仍以JSON原始key運作。
嵌套層級超過4層時,建議將根物件拆分為多個獨立POCO,分別承擔不同業務領域(例如UserDto / OrderDto / PaymentDto),避免一個超大類別塞所有欄位,提升可維護性。
不要將本工具生成的POCO同時作為EF Core Entity與API DTO。建議:①API層使用DTO(JSON生成);②EF Core層使用Entity(手動加上[Key]/[Required]等資料註解);③用AutoMapper/Mapster做DTO↔Entity對映,避免資料庫結構直接暴露給前端。
若專案使用System.Text.Json,建議用IDE全域取代將生成的[JsonProperty("xxx")]改為[JsonPropertyName("xxx")]。或保留原始[JsonProperty] + 安裝Microsoft.AspNetCore.Mvc.NewtonsoftJson套件並呼叫AddNewtonsoftJson()以相容Newtonsoft語法。
本工具所有計算在瀏覽器本機完成,但企業內部建議多加一道防線:①不要把包含生產資料庫連線字串/API主金鑰的JSON複製到任何線上工具;②內部POCO生成建議使用NSwag或Visual Studio 將JSON貼上為類別完全離線生成;③僅對脫敏後的樣本JSON使用線上工具。
超過1MB的JSON在瀏覽器中渲染會較慢,建議:①拆分為多個獨立POCO類別(例如User.cs / Address.cs / Order.cs)按業務模組歸類;②超大型JSON Schema(100+欄位)建議用NSwag或Visual Studio內建功能直接生成;③本工具僅用於中小型API回應(<100欄位)處理。
對於不需要修改的DTO/回應模型,建議將生成的class改為C# 9+ record,並將{ get; set; }改為{ get; init; },好處包括:①編譯期確保資料不會被修改;②自動獲得值相等性比較(Equals/GetHashCode);③搭配with表示式簡化物件複製。
在左側輸入框貼上JSON內容,工具會在400ms內自動呼叫quicktype-core生成C#類別,右側顯示完整程式碼。也可以點「上傳」按鈕選擇.json/.txt檔,或點「範例」載入內建資料。生成後點「複製」按鈕可複製單個類別到剪貼簿或下載為.cs檔。
會的。工具預設使用Newtonsoft.Json相容模式,自動為每個欄位加上[JsonProperty("原始key")]特性,確保欄位名轉為PascalCase後反序列化仍能正確對應到原始JSON鍵。若使用System.Text.Json,可在生成後將[JsonProperty]改為[JsonPropertyName](兩者語義相同),或直接使用System.Text.Json預設命名政策([JsonPropertyName]在System.Text.Json中也可透過自訂JsonNamingPolicy處理)。
預設生成可序列化的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結構:基本型別(null、boolean、number、string)、陣列(一維或多維)、巢狀物件(任意深度)。根輸入可為JSON物件或JSON陣列,JSON物件會生成public class Root,JSON陣列會生成public class Root : List<Item>。不支援JavaScript原生值(函式、Symbol、undefined、Date物件等)。
字串→string、整數→long、浮點數→double、布林→bool、陣列→List<T>、巢狀物件→獨立class、null值欄位→Nullable<T>(例如long? / bool? / string?)。詳細對應規則請參考頁面底部「JSON型別到C#型別對照速查表」。
是的。工具會偵測JSON中顯式為null或缺失的欄位,自動生成Nullable<T>格式(例如long? Id { get; set; }),符合C# 8+引入的Nullable Reference Types(NRT)功能,幫助編譯器在靜態分析時發現空參考風險。注意:啟用NRT後參考型別預設為不可空,需要顯式標記string?才表示可空。
是的。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)。
可以直接使用。生成的檔案是標準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」按鈕,點擊可自動修復常見錯誤:尾逗號、單引號轉雙引號、補齊未加引號的key、移除註解等,修復成功後會繼續生成C#程式碼。
兩者都是.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轉成目標語言的型別定義,但輸出形態不同:JSON轉C#生成帶[JsonProperty]註解的POCO類別,可直接搭配Newtonsoft.Json或System.Text.Json反序列化;JSON轉Java生成帶Lombok/Gson/Jackson註解的POJO;JSON轉Rust生成帶Serde derive的struct。三者側重的生態不同,選擇依技術堆疊而定。
System.Text.Json預設不支援string與DateTime自動轉換,會拋出JsonException。兩種解法:①在欄位加上[JsonConverter(typeof(DateTimeConverter))]自訂轉換器;②在Program.cs中設定全域JsonSerializerOptions:options.PropertyNameCaseInsensitive = true;並用自訂JsonConverter處理DateTime。Newtonsoft.Json預設支援DateTime反序列化,但特殊格式(如Unix時間戳)需要自訂converter。
工具預設不生成namespace是為了保持程式碼片段最大相容性,方便使用者複製到任意專案使用。若需要namespace,可在生成的程式碼頂端手動加入namespace YourApp.Models;並將類別放在對應.cs檔中。建議.NET專案依功能模組組織namespace(例如Models / Dtos / ViewModels / Entities)。
Visual Studio 2019+內建「選擇性貼上 → 將JSON貼上為類別」功能(在編輯功能表 → 選擇性貼上),可直接將JSON轉成C#類別。本工具生成的程式碼與此功能相容:將工具生成的C#程式碼複製到剪貼簿後,貼到任意.cs檔中即可使用。若偏好VS內建功能,也可不開本工具直接使用編輯 → 選擇性貼上 → 將JSON貼上為類別。
左側輸入框為空或只包含空白字元,請確認已貼上有效JSON內容,或點上傳按鈕選擇.json/.txt檔,也可點範例按鈕載入內建範例。
常見原因:尾逗號(例如{"a":1,})、使用單引號而非雙引號、key未加雙引號、包含JavaScript註解。點「修復JSON」按鈕可自動修復部分錯誤;若仍失敗請先用JSON格式化工具驗證。
工具基於JSON樣本推導型別,例如所有整數都是long、所有字串都是string。若需要更精確的型別(int/decimal/Guid/DateTime),請在生成後手動修改欄位型別。System.Text.Json預設不支援DateTime,需要加[JsonConverter]自訂。
工具預設以C# 8+ Nullable Reference Types格式生成(例如string? / List<User>?)。若專案是較舊版.NET Framework/未啟用NRT,參考型別預設可空,可直接刪除string?的?(或在.csproj中啟用<Nullable>enable</Nullable>)。
請在.csproj中加入以下PackageReference: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 然後執行dotnet restore,NuGet會自動下載。若使用System.Text.Json則無需安裝(.NET內建)。
工具自動將JSON欄位名轉為PascalCase(例如user_name → UserName),同時[JsonProperty]註解保留原始key,Newtonsoft.Json反序列化時會依[JsonProperty]對應,無需手動處理。若使用System.Text.Json預設命名政策,需將[JsonProperty]改為[JsonPropertyName]或在Program.cs中設定CamelCase命名政策。
可能原因:①.csproj未加入Newtonsoft.Json/System.Text.Json依賴;②類別放在不合適的目錄(需放在.NET專案根目錄或子目錄並對應namespace);③類別名與專案中其他型別衝突。解決:加入依賴、調整目錄與namespace、重新命名衝突類別。
ASP.NET Core 3.0+預設使用System.Text.Json,但工具生成的[JsonProperty]是Newtonsoft.Json語法。兩種解法:①在.csproj加入Microsoft.AspNetCore.Mvc.NewtonsoftJson套件並在Program.cs呼叫AddNewtonsoftJson();②將生成的[JsonProperty("xxx")]全部改為[JsonPropertyName("xxx")](System.Text.Json語法)。
通常是陣列為空[]時預設推導為List<object>,請在原始JSON中加入至少一個範例元素(例如[1,2,3]),工具會依第一個元素推導型別;或在生成後手動將List<object>改為List<long>/List<int>。
建議將JSON拆成多個獨立模組分別轉換,或只提取需要建模的部分。瀏覽器渲染大量巢狀類別會消耗較多記憶體,超過5MB的JSON建議使用NSwag或Visual Studio內建「將JSON貼上為類別」功能。
工具根據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) |
.NET生態兩大主流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 |
本JSON轉C#工具的所有作業完全在您的瀏覽器本機完成:JSON解析、C#程式碼生成、檔案下載全部透過瀏覽器JavaScript + WebAssembly(quicktype-core)於客戶端執行,不會透過網路向任何伺服器傳送JSON內容、上傳的檔案或生成的程式碼。檔案上傳使用瀏覽器原生FileReader API直接讀取至記憶體,不經過任何中繼服務。不使用Cookie追蹤,不收集使用者輸入資料或使用行為資料。關閉或重新整理頁面後,所有輸入與輸出內容將自動從記憶體清除。適合處理包含API金鑰、權杖、敏感業務資料的JSON。