logo
GeekFormat

JSON轉C#

免費線上JSON轉C#工具。將API回應或組態JSON一鍵轉成標準C#類別,直接用於ASP.NET Core、Unity、Blazor、.NET MAUI專案。支援[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]註解會保留原始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,示範物件導向建模、屬性存取子、序列化原理

使用方法

  1. 在左側編輯器貼上JSON內容,或點上傳按鈕選擇.json/.txt檔,或點範例按鈕載入內建資料
  2. 等待400ms後自動轉換,右側會顯示生成的C# POCO類別程式碼
  3. 若有JSON格式錯誤,可點「修復JSON」按鈕自動修復常見語法問題後再轉換
  4. 點「複製」按鈕複製單個類別到剪貼簿貼到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?),避免編譯期空參考例外
  • 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

csharp

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;
    }
}

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 + 反序列化
        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轉成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)、陣列(一維或多維)、巢狀物件(任意深度)。根輸入可為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)功能,幫助編譯器在靜態分析時發現空參考風險。注意:啟用NRT後參考型別預設為不可空,需要顯式標記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有什麼區別?

三者都是將JSON轉成目標語言的型別定義,但輸出形態不同:JSON轉C#生成帶[JsonProperty]註解的POCO類別,可直接搭配Newtonsoft.Json或System.Text.Json反序列化;JSON轉Java生成帶Lombok/Gson/Jackson註解的POJO;JSON轉Rust生成帶Serde derive的struct。三者側重的生態不同,選擇依技術堆疊而定。

包含DateTime欄位的類別反序列化失敗怎麼辦?

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,可在生成的程式碼頂端手動加入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,參考型別預設可空,可直接刪除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語法。兩種解法:①在.csproj加入Microsoft.AspNetCore.Mvc.NewtonsoftJson套件並在Program.cs呼叫AddNewtonsoftJson();②將生成的[JsonProperty("xxx")]全部改為[JsonPropertyName("xxx")](System.Text.Json語法)。

陣列是數字型別但生成List<object>

通常是陣列為空[]時預設推導為List<object>,請在原始JSON中加入至少一個範例元素(例如[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物件」的縮寫,約束為:公開預設建構函式 + private欄位 + 公開{ 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#中表示實值型別可為空的型別(例如long? / bool?)。本工具自動將JSON null欄位推導為Nullable<T>,避免編譯期空參考例外。
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等十餘種語言,基於TypeScript + WebAssembly在瀏覽器執行。
.NET MAUI
微軟跨平台UI框架(.NET Multi-platform App UI),C#程式碼可在iOS/Android/Windows/macOS共用。本工具生成的POCO適合作為MAUI XAML資料繫結的Model。
Blazor
微軟基於WebAssembly的SPA框架,分Server與WebAssembly兩種模式。本工具生成的C#類別可用於Blazor元件參數、強型別API回應模型,提升單一語言全棧開發效率。
HttpClient.GetFromJsonAsync
.NET 5+/System.Net.Http.Json擴充方法,HTTP GET + JSON反序列化一行完成。搭配本工具生成的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 / falseboolbool?JSON布林值直接對應C# bool
42longlong?JSON整數預設對應long(64位元整數,相容大數)
3.14doubledouble?JSON浮點數預設對應double(雙精度浮點數)
"hello"stringstring?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降級,建議生成後手動改為具體型別
{...}巢狀物件獨立classClassName?巢狀物件生成獨立class,欄位名首字母大寫命名(address → Address)

Newtonsoft.Json與System.Text.Json註解對照表

.NET生態兩大主流JSON程式庫欄位對應特性對照。本工具預設生成Newtonsoft相容[JsonProperty]:

比較項目Newtonsoft.JsonSystem.Text.Json
欄位對應特性[JsonProperty("user_name")][JsonPropertyName("user_name")]
預設命名政策PascalCase欄位名保留(snake_case需[JsonProperty])原始欄位名保留(以JSON鍵匹配,預設CamelCase)
自訂命名[JsonProperty]逐欄位指定[JsonPropertyName] + JsonNamingPolicy全域設定
null值處理NullValueHandling.Ignore / IncludeJsonIgnoreCondition.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