logo
GeekFormat

Công cụ chuyển đổi JSON sang C# trực tuyến miễn phí. Chuyển đổi phản hồi API hoặc JSON cấu hình thành các lớp C# tiêu chuẩn chỉ với một cú nhấp chuột, sử dụng trực tiếp trong các dự án ASP.NET Core, Unity, Blazor, .NET MAUI. Hỗ trợ chú thích [JsonProperty], List generic, Nullable<T>, tự động tách các lớp lồng nhau, tạo hoàn toàn cục bộ trên trình duyệt.

Đề xuất Liên quan

Giới thiệu về JSON sang C#: Chuyển đổi dữ liệu JSON thành lớp C# POCO có thể biên dịch

JSON sang C# là quá trình chuyển đổi dữ liệu ở định dạng JSON (đối tượng hoặc mảng) thành định nghĩa lớp C# (POCO, Plain Old CLR Object). C# là ngôn ngữ chủ lực của hệ sinh thái .NET, được sử dụng rộng rãi trong các kịch bản như backend ASP.NET Core, game Unity, ứng dụng đa nền tảng .NET MAUI, Blazor WebAssembly, ứng dụng máy tính để bàn (WPF/WinForms), dịch vụ đám mây Azure, v.v. Trong quá trình phát triển, thường cần chuyển đổi mẫu JSON trong tài liệu API hoặc phản hồi thực tế thành kiểu C#, viết lớp thủ công không chỉ tốn nhiều công sức lặp lại mà còn dễ viết sai kiểu trường và chú thích, vì vậy công cụ này nhằm mục đích tự động hóa quy trình này.

Công cụ này thực thi cục bộ trên trình duyệt dựa trên quicktype-core, sử dụng trình kết xuất C# để tạo mã lớp POCO tiêu chuẩn, đầu ra mặc định bao gồm using System.Collections.Generic; và chú thích [JsonProperty("khóa gốc")] (chế độ tương thích Newtonsoft.Json), có thể mở trực tiếp trong Visual Studio để biên dịch. Nó không chỉ là bản nháp kiểu đơn thuần, mà là một lớp C# có thể sử dụng ngay sau khi đặt vào dự án .NET kết hợp với gói NuGet.

Suy luận kiểu là cốt lõi của JSON sang C#. Công cụ ánh xạ các kiểu cơ bản của JSON sang kiểu tiêu chuẩn .NET: chuỗi→string, số nguyên→long, số thực dấu phẩy động→double, boolean→bool, mảng→List<T>, đối tượng lồng nhau→class độc lập, giá trị null→Nullable<T> (ví dụ long? / bool? / string?). Đối với các đối tượng lồng nhau, công cụ tự động tạo lớp mới cho mỗi cấp và đặt tên bằng cách viết hoa chữ cái đầu của tên trường, ví dụ trường address sẽ tạo lớp Address, đối tượng trong mảng items sẽ tạo lớp Item.

Tích hợp với cú pháp C# hiện đại: Công cụ này mặc định tạo POCO có thể tuần tự hóa (thuộc tính công khai { get; set; }). Đối với các dự án nhấn mạnh tính bất biến, nhà phát triển có thể thay đổi class thành kiểu record C# 9+ và thay đổi { get; set; } thành thuộc tính init-only (public string Name { get; init; }), kết hợp với JsonSerializer.Deserialize<T>(jsonString) có thể đảm bảo tại thời gian biên dịch rằng dữ liệu không bị sửa đổi, điều này phù hợp với xu hướng thiết kế thực thể bất biến trong ASP.NET Core 7+ Minimal API, Entity Framework Core 8+.

Khác với một số công cụ trực tuyến cần tải JSON lên máy chủ để xử lý, tất cả các phép tính của công cụ này đều được hoàn thành trong trình duyệt. quicktype-core được tải và thực thi thông qua Web Worker, phân tích JSON, suy luận kiểu, tạo mã C# và tải xuống tệp đều được thực hiện cục bộ, không gửi dữ liệu đến bất kỳ máy chủ nào. Điều này đặc biệt quan trọng đối với JSON chứa khóa API, trường riêng tư của người dùng, cấu trúc kinh doanh chưa công khai, sau khi đóng trang dữ liệu sẽ bị xóa khỏi bộ nhớ.

Cần lưu ý rằng mã được tạo tự động là điểm khởi đầu chứ không phải điểm kết thúc. Công cụ suy luận kiểu dựa trên mẫu JSON, không thể xác định kiểu chính xác hơn trong nghiệp vụ (ví dụ các kiểu ngữ nghĩa như URL, Email, ID đều sẽ được suy luận là string). Đối với trường JSON snake_case, trường C# sẽ giữ tên PascalCase (user_name → UserName), nhưng chú thích [JsonProperty] sẽ giữ nguyên khóa gốc, tự động ánh xạ khi giải tuần tự hóa. Khuyến nghị coi kết quả tạo ra là bản nháp đầu tiên, sau đó tinh chỉnh tên trường, kiểu, thuộc tính theo quy phạm dự án.

Trường hợp sử dụng

  • ASP.NET Core Web API: Chuyển đổi JSON mẫu trong tài liệu OpenAPI/Swagger thành lớp DTO, kết hợp với ràng buộc mô hình [FromBody] để nhận yêu cầu từ frontend
  • ASP.NET Core MVC: Chuyển đổi nội dung yêu cầu form/JSON thành Model kiểu mạnh, kết hợp với xác thực tự động ModelState
  • Giải tuần tự hóa Newtonsoft.Json: Chuyển đổi JSON phản hồi từ giao diện bên thứ ba thành lớp POCO với [JsonProperty], không cần ánh xạ trường thủ công
  • Kịch bản hiệu năng cao System.Text.Json: Chuyển đổi JSON thành kiểu record hoặc thuộc tính init-only, kết hợp với JsonSerializer.Deserialize<T> để cải thiện tốc độ khởi động
  • Script game Unity: Chuyển đổi JSON trả về từ API mạng (dữ liệu người chơi, cấu hình màn chơi, vật phẩm cửa hàng, bảng xếp hạng) thành mô hình dữ liệu ScriptableObject có thể tuần tự hóa
  • Ứng dụng đa nền tảng .NET MAUI: Chuyển đổi JSON từ API backend thành lớp Model, sử dụng trong ràng buộc dữ liệu XAML, chia sẻ mô hình nghiệp vụ trên iOS/Android/Windows
  • Blazor Server / WebAssembly: Chuyển đổi JSON từ API thành tham số thành phần/mô hình máy chủ kiểu mạnh, kết hợp với @inject HttpClient để tiêu thụ kiểu chia sẻ frontend/backend
  • Entity Framework Core: Chuyển đổi tài liệu JSON xuất từ cơ sở dữ liệu thành lớp thực thể, làm lớp cơ sở tham chiếu cho di chuyển mô hình EF Core, kết hợp với các chú thích dữ liệu như [Key]/[Required]
  • Azure Functions / AWS Lambda: Chuyển đổi JSON từ sự kiện kích hoạt Event Grid/SNS/API Gateway/Cosmos DB thành tham số sự kiện kiểu mạnh, đơn giản hóa chữ ký hàm serverless
  • Giao tiếp thời gian thực SignalR: Chuyển đổi tin nhắn JSON được đẩy từ máy chủ (trò chuyện, thông báo, giá thị trường, dữ liệu IoT) thành kiểu C#, tiêu thụ kiểu mạnh trong phương thức Hub
  • Hợp đồng giao tiếp vi dịch vụ: Chuyển đổi mẫu yêu cầu/phản hồi JSON của RPC giữa các dịch vụ (gRPC-Web/HTTP/WCF) thành lớp C#, làm định nghĩa hợp đồng chia sẻ giữa nhiều nhóm
  • Tải tệp cấu hình: Chuyển đổi cấu trúc con appsettings.json thành lớp mẫu Options (ví dụ MyOptions : IOptions<MyOptions> kết hợp với IConfiguration.Bind)
  • Chuẩn bị dữ liệu kiểm thử: Chuyển đổi fixture JSON thành lớp C#, sau đó giải tuần tự hóa bằng Newtonsoft/System.Text.Json làm động lực kiểm thử đơn vị, kết hợp với xUnit/NUnit/MSTest
  • Phân tích dữ liệu trình thu thập dữ liệu web: Chuyển đổi dữ liệu JSON thu thập bằng HtmlAgilityPack/AngleSharp/PuppeteerSharp thành lớp C#, tránh thiếu trường do truy cập động JObject
  • Viết tài liệu API: Đưa ví dụ lớp C# vào định nghĩa schema trong tài liệu Swagger/OpenAPI, ReDoc, Knife4j, Swagger UI để cải thiện khả năng đọc của tài liệu
  • Hợp tác đánh giá mã: Chuyển đổi JSON phản hồi API trực tiếp thành POCO dễ đọc, thuận tiện cho việc thảo luận về đặt tên trường, lựa chọn kiểu, sử dụng chú thích trong Code Review
  • Tái cấu trúc dự án cũ: Tái cấu trúc truy cập động dựa trên JObject/Dictionary<string, object> thành truy cập kiểu mạnh dựa trên POCO, cải thiện kiểm tra kiểu tại thời gian biên dịch và khả năng bảo trì
  • Đào tạo và huấn luyện: Chuyển đổi JSON mẫu thành POCO trong khóa học C#, đào tạo nhập môn .NET để trình diễn mô hình hóa hướng đối tượng, bộ truy cập thuộc tính, nguyên tắc tuần tự hóa

Cách Sử dụng

  1. Dán nội dung JSON vào trình soạn thảo bên trái, hoặc nhấp nút tải lên để chọn tệp .json/.txt, hoặc nhấp nút ví dụ để tải dữ liệu có sẵn
  2. Đợi 400ms để tự động chuyển đổi, bên phải sẽ hiển thị mã lớp C# POCO được tạo
  3. Nếu có lỗi định dạng JSON, có thể nhấp nút "Sửa JSON" để tự động sửa các vấn đề cú pháp phổ biến rồi chuyển đổi lại
  4. Nhấp nút "Sao chép" để sao chép một lớp vào bộ nhớ đệm dán vào Visual Studio/Rider/VS Code, hoặc nhấp "Tải xuống" để lưu dưới dạng tệp .cs

Tính năng

  • Tạo hoàn toàn cục bộ trên trình duyệt: Phân tích JSON và tạo mã C# đều được thực hiện trong trình duyệt thông qua JavaScript + quicktype-core, dữ liệu đầu vào không được tải lên bất kỳ máy chủ nào
  • Hai dạng POCO + record: Mặc định tạo lớp POCO có thể tuần tự hóa, chuyển đổi sang kiểu record C# 9+ chỉ với một cú nhấp chuột, phù hợp với phong cách mã hóa .NET hiện đại
  • Chú thích Newtonsoft [JsonProperty]: Tự động thêm [JsonProperty("khóa gốc")] cho mỗi trường, tương thích với hành vi mặc định của Newtonsoft.Json, tên trường PascalCase không ảnh hưởng đến việc giải tuần tự hóa
  • Tự động tách đối tượng lồng nhau: Các đối tượng JSON lồng nhau sẽ được tạo đệ quy thành các lớp C# độc lập, đặt tên theo quy tắc viết hoa chữ cái đầu của tên trường (ví dụ address → Address), tránh xung đột kiểu
  • Tự động mở rộng List generic: Mảng JSON tự động chuyển thành List<T>, T được suy luận tự động từ phần tử đầu tiên của mảng (["a","b"] → List<string>, [{...}] → List<Item>)
  • Tự động suy luận Nullable<T>: Trường có giá trị null trong JSON tự động được đánh dấu là Nullable<T> (ví dụ long? / string? / bool?), tránh ngoại lệ tham chiếu null tại thời gian biên dịch
  • Đặt tên trường PascalCase: Đầu vào snake_case tự động chuyển thành PascalCase (ví dụ user_name → UserName), đồng thời chú thích [JsonProperty] giữ nguyên khóa gốc để đảm bảo tương thích giải tuần tự hóa
  • Ánh xạ kiểu giá trị phong phú: string→string, integer→long, float→double, bool→bool, array→List<T>, null→Nullable<T>
  • Mẫu .cs hoàn chỉnh: Tự động tạo tệp C# tiêu chuẩn bao gồm using System.Collections.Generic; + namespace + public class + trường + thuộc tính, có thể biên dịch trực tiếp
  • Sao chép và tải xuống: Sao chép một lớp vào bộ nhớ đệm hoặc tải xuống dưới dạng tệp .cs chỉ với một cú nhấp chuột, kéo thả trực tiếp vào Visual Studio / Rider / VS Code để sử dụng
  • Sửa lỗi JSON một cú nhấp: Tự động sửa các lỗi định dạng phổ biến như dấu phẩy đuôi, dấu nháy đơn, thiếu dấu nháy, sau khi sửa thành công tiếp tục tạo mã C#
  • Lịch sử cục bộ: Tự động lưu đầu vào gần nhất dựa trên localStorage, có thể khôi phục nhanh chóng sau khi làm mới trang hoặc vô tình đóng để tiếp tục chỉnh sửa

Ví dụ mã

C#: Sử dụng Newtonsoft.Json giải tuần tự hóa POCO do công cụ tạo

csharp

Cách sử dụng phổ biến nhất trong dự án ASP.NET Core: Kết hợp POCO do công cụ tạo với Newtonsoft.Json để giải tuần tự hóa phản hồi 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 do công cụ tạo:
    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) Gọi API lấy chuỗi JSON
        var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");

        // 2) Giải tuần tự hóa thành POCO do công cụ tạo
        //    Nội bộ tự động ánh xạ JSON snake_case theo các chú thích như [JsonProperty("id")]
        var user = JsonConvert.DeserializeObject<User>(json);

        Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

C#: Sử dụng POCO do công cụ tạo trong ASP.NET Core Controller để nhận yêu cầu

csharp

Đặt POCO User do công cụ tạo vào ASP.NET Core Controller, kết hợp với [FromBody] tự động nhận yêu cầu JSON từ frontend.

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

// POCO do công cụ tạo (mặc định sử dụng 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");
        }

        // Logic nghiệp vụ: lưu đơn hàng
        // var order = OrderService.Create(request);

        return Ok(new { order_id = 12345, status = "created" });
    }
}

/*
 * Phụ thuộc .csproj tương ứng:
 * <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
 * <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 */

C#: HttpClient.GetFromJsonAsync + System.Text.Json giải tuần tự hóa

csharp

Cách sử dụng được khuyến nghị cho .NET 5+/.NET 7+: Sử dụng phương thức mở rộng tích hợp sẵn System.Text.Json + kiểu record, kết hợp với chú thích [JsonPropertyName].

using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

// Công cụ mặc định tạo POCO class; có thể thủ công thay đổi thành kiểu record (đối tượng truyền dữ liệu bất biến) như sau:
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 hoàn thành HTTP + giải tuần tự hóa trong một dòng
        var user = await _http.GetFromJsonAsync<User>(
            $"https://api.example.com/users/{userId}");

        System.Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

/*
 * Phụ thuộc .csproj tương ứng (System.Text.Json được tích hợp sẵn, không cần cài đặt thêm):
 * <TargetFramework>net7.0</TargetFramework>
 *
 * Nếu dự án là .NET 7+ và muốn tương thích với cú pháp Newtonsoft [JsonProperty],
 * có thể thêm vào Program.cs:
 *   builder.Services.AddControllers()
 *       .AddNewtonsoftJson(options =>
 *       {
 *           options.SerializerSettings.ContractResolver =
 *               new Newtonsoft.Json.Serialization.DefaultContractResolver();
 *       });
 */

Best Practices

Thêm <Nullable>enable</Nullable> vào .csproj, các kiểu có thể null như string? / List<User>? do công cụ này tạo ra sẽ tự động nhận được kiểm tra null tại thời gian biên dịch, tránh sự cố thời gian chạy NullReferenceException.

Công cụ này tự động chuyển đổi trường JSON thành PascalCase (ví dụ user_name → UserName), đồng thời chú thích [JsonProperty] giữ nguyên khóa gốc, đảm bảo mã tuân thủ quy phạm đặt tên chính thức của .NET, giải tuần tự hóa vẫn hoạt động với khóa gốc JSON.

Khi mức độ lồng nhau vượt quá 4 cấp, khuyến nghị chia đối tượng gốc thành nhiều POCO độc lập, chịu trách nhiệm cho các lĩnh vực nghiệp vụ khác nhau (ví dụ UserDto / OrderDto / PaymentDto), tránh một lớp lớn chứa tất cả các trường, nâng cao khả năng bảo trì.

Không sử dụng POCO do công cụ này tạo ra vừa là EF Core Entity vừa là API DTO. Khuyến nghị: ①Lớp API sử dụng DTO (được tạo từ JSON); ②Lớp EF Core sử dụng Entity (thủ công thêm các chú thích dữ liệu như [Key]/[Required]); ③Sử dụng AutoMapper/Mapster để thực hiện ánh xạ DTO ↔ Entity, tránh cấu trúc cơ sở dữ liệu bị lộ trực tiếp cho frontend.

Nếu dự án sử dụng System.Text.Json, khuyến nghị sử dụng thay thế toàn cục trong IDE để thay đổi [JsonProperty("xxx")] được tạo thành [JsonPropertyName("xxx")]. Hoặc giữ nguyên [JsonProperty] gốc + cài đặt gói Microsoft.AspNetCore.Mvc.NewtonsoftJson và gọi AddNewtonsoftJson() để tương thích với cú pháp Newtonsoft.

Tất cả các phép tính của công cụ này được hoàn thành cục bộ trên trình duyệt, nhưng trong doanh nghiệp khuyến nghị thêm một lớp phòng thủ: ①Không sao chép JSON chứa chuỗi kết nối cơ sở dữ liệu sản xuất/khóa chính API vào bất kỳ công cụ trực tuyến nào; ②Đối với việc tạo POCO nội bộ, khuyến nghị sử dụng NSwag hoặc Dán JSON dưới dạng các lớp của Visual Studio để tạo hoàn toàn ngoại tuyến; ③Chỉ sử dụng công cụ trực tuyến với JSON mẫu sau khi đã ẩn thông tin nhạy cảm.

JSON vượt quá 1MB sẽ hiển thị chậm trong trình duyệt, khuyến nghị: ①Chia thành nhiều lớp POCO độc lập (ví dụ User.cs / Address.cs / Order.cs) phân loại theo module nghiệp vụ; ②Đối với JSON Schema cực lớn (hơn 100 trường), khuyến nghị sử dụng NSwag hoặc tính năng tích hợp sẵn của Visual Studio để tạo trực tiếp; ③Công cụ này chỉ sử dụng để xử lý phản hồi API vừa và nhỏ (dưới 100 trường).

Đối với DTO/mô hình phản hồi không cần sửa đổi, khuyến nghị thay đổi class được tạo thành record C# 9+ và thay đổi { get; set; } thành { get; init; }, lợi ích bao gồm: ①Đảm bảo tại thời gian biên dịch rằng dữ liệu không bị sửa đổi; ②Tự động có được so sánh đẳng thức giá trị (Equals/GetHashCode); ③Kết hợp với biểu thức with để đơn giản hóa sao chép đối tượng.

Câu hỏi Thường gặp

Làm thế nào để chuyển đổi JSON thành lớp C#?

Dán nội dung JSON vào ô nhập liệu bên trái, công cụ sẽ tự động gọi quicktype-core để tạo lớp C# trong vòng 400ms, hiển thị mã hoàn chỉnh ở bên phải. Bạn cũng có thể nhấp nút "Tải lên" để chọn tệp .json/.txt, hoặc nhấp nút "Ví dụ" để tải dữ liệu có sẵn. Sau khi tạo, nhấp nút "Sao chép" để sao chép một lớp vào bộ nhớ đệm hoặc tải xuống dưới dạng tệp .cs.

Mã C# được tạo có chứa chú thích [JsonProperty] không?

Có. Công cụ mặc định sử dụng chế độ tương thích Newtonsoft.Json, tự động thêm thuộc tính [JsonProperty("khóa gốc")] cho mỗi trường, đảm bảo sau khi tên trường chuyển thành PascalCase, giải tuần tự hóa vẫn có thể ánh xạ chính xác đến khóa JSON gốc. Nếu sử dụng System.Text.Json, sau khi tạo có thể thay đổi [JsonProperty] thành [JsonPropertyName] (cả hai có cùng ngữ nghĩa), hoặc trực tiếp sử dụng chính sách đặt tên mặc định của System.Text.Json ([JsonPropertyName] trong System.Text.Json cũng có thể được xử lý thông qua JsonNamingPolicy tùy chỉnh).

Nên tạo lớp POCO hay kiểu record?

Mặc định tạo lớp POCO có thể tuần tự hóa (bao gồm thuộc tính { get; set; }). Nếu dự án sử dụng kiểu record C# 9+ (đối tượng truyền dữ liệu bất biến, phù hợp cho DTO/mô hình bất biến), sau khi tạo có thể thủ công thay đổi class thành record và thay đổi { get; set; } thành thuộc tính init-only (public string Name { get; init; }). Kiểu record được sử dụng rộng rãi trong ASP.NET Core 7+ Minimal API, Entity Framework Core.

Hỗ trợ những cấu trúc dữ liệu JSON nào?

Hỗ trợ tất cả cấu trúc JSON hợp lệ: kiểu cơ bản (null, boolean, number, string), mảng (một chiều hoặc đa chiều), đối tượng lồng nhau (độ sâu bất kỳ). Đầu vào gốc có thể là đối tượng JSON hoặc mảng JSON, đối tượng JSON sẽ tạo public class Root, mảng JSON sẽ tạo public class Root : List<Item>. Không hỗ trợ các giá trị gốc JavaScript (hàm, Symbol, undefined, đối tượng Date, v.v.).

Kiểu trường JSON ánh xạ như thế nào đến kiểu C#?

Chuỗi→string, số nguyên→long, số thực dấu phẩy động→double, boolean→bool, mảng→List<T>, đối tượng lồng nhau→class độc lập, trường giá trị null→Nullable<T> (ví dụ long? / bool? / string?). Để biết quy tắc ánh xạ chi tiết, vui lòng tham khảo "Bảng tra cứu nhanh ánh xạ kiểu JSON sang kiểu C#" ở cuối trang.

Trường null có tự động tạo Nullable<T> không?

Có. Công cụ sẽ phát hiện các trường rõ ràng là null hoặc bị thiếu trong JSON, tự động tạo định dạng Nullable<T> (ví dụ long? Id { get; set; }), phù hợp với tính năng Nullable Reference Types (NRT) được giới thiệu trong C# 8+, giúp trình biên dịch phát hiện rủi ro tham chiếu null trong phân tích tĩnh. Lưu ý: Sau khi bật NRT, kiểu tham chiếu mặc định là không thể null, cần đánh dấu rõ ràng string? để chỉ định có thể null.

Mảng có chuyển thành List<T> không?

Có. Mảng JSON được chuyển đổi thống nhất thành List<T> trong C#, kiểu phần tử được suy luận tự động từ phần tử đầu tiên của mảng: mảng chuỗi→List<string>, mảng số nguyên→List<long>, mảng đối tượng→List<Item>. Mảng trống [] vì không thể suy luận kiểu phần tử, mặc định tạo List<object>, khuyến nghị sau khi tạo thủ công thay đổi thành kiểu cụ thể (ví dụ List<MyClass>). Nếu thích cú pháp mảng T[], sau khi tạo có thể sử dụng tính năng tìm và thay thế hàng loạt trong IDE để thay thế.

Đối tượng lồng nhau được xử lý như thế nào?

Công cụ sẽ tạo một lớp C# độc lập cho mỗi đối tượng lồng nhau, quy tắc đặt tên là viết hoa chữ cái đầu của tên trường (ví dụ address → Address). Nếu đối tượng gốc chứa mảng items và phần tử là đối tượng, sẽ tạo lớp public class Item, sau đó tham chiếu bằng public List<Item> Items { get; set; }. Các đối tượng có cấu trúc giống hệt nhau sẽ sử dụng lại cùng một kiểu để tránh định nghĩa trùng lặp.

Có thể tùy chỉnh tên lớp và không gian tên được tạo không?

Có. quicktype-core mặc định sử dụng tên nguồn JSON (ví dụ Root) làm tên lớp gốc, sau khi tạo có thể thủ công sửa tên lớp, namespace và tất cả các vị trí tham chiếu. Tên tệp .cs được tải xuống cũng có thể đổi tên theo nhu cầu khi lưu (ví dụ đổi thành User.cs, Order.cs).

Mã được tạo có thể đặt trực tiếp vào dự án .NET để sử dụng không?

Có thể sử dụng trực tiếp. Tệp được tạo là cú pháp C# tiêu chuẩn, bao gồm tham chiếu using System.Collections.Generic., chỉ cần đặt tệp .cs vào thư mục gốc hoặc thư mục con của dự án .NET, không cần thêm phụ thuộc bổ sung vào .csproj (System.Text.Json được tích hợp sẵn trong .NET; Newtonsoft.Json cần cài đặt gói Microsoft.AspNetCore.Mvc.NewtonsoftJson hoặc Newtonsoft.Json thông qua NuGet). Sau đó có thể sử dụng JsonConvert.DeserializeObject<T>(jsonString) hoặc JsonSerializer.Deserialize<T>(jsonString) để giải tuần tự hóa.

Dữ liệu có được tải lên máy chủ không?

Thực thi hoàn toàn cục bộ trên trình duyệt. Phân tích JSON, tạo mã C# và tải xuống tệp đều được hoàn thành trong trình duyệt thông qua JavaScript + WebAssembly, dữ liệu JSON đầu vào và mã C# được tạo không được tải lên bất kỳ máy chủ nào, cũng không được ghi lại hoặc lưu vào bộ nhớ đệm trên đám mây. JSON nhạy cảm chứa khóa API, mã thông báo, trường kinh doanh chưa công khai cũng có thể yên tâm sử dụng, đóng trang sẽ bị xóa.

Có cần đăng ký hoặc đăng nhập không?

Không cần. Công cụ hoàn toàn miễn phí, không cần đăng ký, đăng nhập, ủy quyền, mở trang là có thể sử dụng ngay, tất cả các tính năng đều được cung cấp cục bộ trên trình duyệt.

Lỗi định dạng JSON thì sao?

Công cụ sẽ tự động phát hiện tính hợp lệ của JSON, khi có lỗi sẽ hiển thị thông báo lỗi màu đỏ ở bên phải và cung cấp nút "Sửa JSON", nhấp vào có thể tự động sửa các lỗi phổ biến: dấu phẩy đuôi, dấu nháy đơn thành dấu nháy kép, bổ sung dấu nháy cho khóa chưa có dấu nháy, xóa chú thích, v.v. Sau khi sửa thành công sẽ tiếp tục tạo mã C#.

Newtonsoft.Json và System.Text.Json cái nào tốt hơn?

Cả hai đều là thư viện JSON chính thống nhất trong hệ sinh thái .NET. Newtonsoft.Json (còn gọi là Json.NET) có lịch sử lâu đời nhất và hệ sinh thái phong phú nhất, tương thích với hầu hết các dự án .NET; System.Text.Json là thư viện hiệu năng cao được tích hợp sẵn trong .NET Core 3.0+, khởi động nhanh, chiếm dụng bộ nhớ thấp, thân thiện với AOT. ASP.NET Core 3.0+ mặc định sử dụng System.Text.Json; các dự án .NET Framework cũ và nhiều thư viện bên thứ ba mặc định phụ thuộc vào Newtonsoft.Json. Công cụ này mặc định tạo [JsonProperty] để tương thích với cả hai (System.Text.Json trong .NET 7+ cũng hỗ trợ gói tương thích Newtonsoft Microsoft.AspNetCore.Mvc.NewtonsoftJson).

Sự khác biệt với JSON sang Java, JSON sang Rust là gì?

Cả ba đều chuyển đổi JSON thành định nghĩa kiểu của ngôn ngữ đích, nhưng hình thức đầu ra khác nhau: JSON sang C# tạo lớp POCO với chú thích [JsonProperty], có thể kết hợp trực tiếp với Newtonsoft.Json hoặc System.Text.Json để giải tuần tự hóa; JSON sang Java tạo POJO với chú thích Lombok/Gson/Jackson; JSON sang Rust tạo struct với Serde derive. Cả ba tập trung vào các hệ sinh thái khác nhau, lựa chọn tùy thuộc vào ngăn xếp công nghệ.

Tạo lớp chứa trường DateTime nhưng giải tuần tự hóa thất bại thì sao?

System.Text.Json mặc định không hỗ trợ chuyển đổi tự động giữa string và DateTime, sẽ ném ra JsonException. Hai giải pháp: ①thêm bộ chuyển đổi tùy chỉnh [JsonConverter(typeof(DateTimeConverter))] vào trường; ②thiết lập JsonSerializerOptions toàn cục trong Program.cs: options.PropertyNameCaseInsensitive = true; và sử dụng JsonConverter tùy chỉnh để xử lý DateTime. Newtonsoft.Json mặc định hỗ trợ giải tuần tự hóa DateTime, nhưng các định dạng đặc biệt (như dấu thời gian Unix) cần converter tùy chỉnh.

Tại sao lớp được tạo không có namespace?

Công cụ mặc định không tạo namespace là để duy trì tính tương thích tối đa của đoạn mã, giúp người dùng dễ dàng sao chép và sử dụng trong bất kỳ dự án nào. Nếu cần namespace, có thể thủ công thêm namespace YourApp.Models; vào đầu mã được tạo và đặt lớp vào tệp .cs tương ứng. Khuyến nghị các dự án .NET nên tổ chức namespace theo module chức năng (ví dụ Models / Dtos / ViewModels / Entities).

Visual Studio có thể dán thành lớp một cú nhấp không?

Visual Studio 2019+ có tích hợp sẵn tính năng "Dán đặc biệt → Dán JSON dưới dạng các lớp" (trong menu Chỉnh sửa → Dán đặc biệt), có thể trực tiếp chuyển đổi JSON thành lớp C#. Mã được tạo bởi công cụ này tương thích với tính năng này: sau khi sao chép mã C# do công cụ tạo vào bộ nhớ đệm, dán vào bất kỳ tệp .cs nào để sử dụng. Nếu thích tính năng tích hợp sẵn của VS, cũng có thể không mở công cụ này mà trực tiếp sử dụng Chỉnh sửa → Dán đặc biệt → Dán JSON dưới dạng các lớp.

Xử lý sự cố

Hiển thị "Vui lòng nhập dữ liệu JSON" hoặc bên phải trống

Ô nhập liệu bên trái trống hoặc chỉ chứa ký tự trắng, vui lòng xác nhận đã dán nội dung JSON hợp lệ, hoặc nhấp nút tải lên để chọn tệp .json/.txt, cũng có thể nhấp nút ví dụ để tải ví dụ có sẵn.

Hiển thị phân tích JSON thất bại

Nguyên nhân phổ biến: dấu phẩy đuôi (ví dụ {"a":1,}), sử dụng dấu nháy đơn thay vì dấu nháy kép, khóa không được đặt trong dấu nháy kép, chứa chú thích JavaScript. Nhấp nút "Sửa JSON" có thể tự động sửa một số lỗi; nếu vẫn thất bại vui lòng xác thực bằng công cụ định dạng JSON trước.

Kiểu trường được tạo không đủ chính xác

Công cụ suy luận kiểu dựa trên mẫu JSON, ví dụ tất cả số nguyên là long, tất cả chuỗi là string. Nếu cần kiểu chính xác hơn (int/decimal/Guid/DateTime), vui lòng thủ công sửa kiểu trường sau khi tạo. System.Text.Json mặc định không hỗ trợ DateTime, cần tùy chỉnh bằng [JsonConverter].

Trường null tạo Nullable<T> nhưng dự án không bật Nullable Reference Types

Công cụ mặc định tạo ở định dạng Nullable Reference Types C# 8+ (ví dụ string? / List<User>?). Nếu dự án là .NET Framework phiên bản cũ hơn/không bật NRT, kiểu tham chiếu mặc định có thể null, có thể trực tiếp xóa ? của string? (hoặc bật <Nullable>enable</Nullable> trong .csproj).

Khi biên dịch báo không tìm thấy phụ thuộc Newtonsoft.Json

Vui lòng thêm PackageReference sau vào .csproj: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> Sau đó thực hiện dotnet restore, NuGet sẽ tự động tải xuống. Nếu sử dụng System.Text.Json thì không cần cài đặt (tích hợp sẵn trong .NET).

Trường snake_case JSON không khớp với tên trường PascalCase

Công cụ tự động chuyển đổi tên trường JSON thành PascalCase (ví dụ user_name → UserName), đồng thời chú thích [JsonProperty] giữ nguyên khóa gốc, Newtonsoft.Json sẽ ánh xạ theo [JsonProperty] khi giải tuần tự hóa, không cần xử lý thủ công. Nếu sử dụng chính sách đặt tên mặc định System.Text.Json, cần thay đổi [JsonProperty] thành [JsonPropertyName] hoặc thiết lập chính sách đặt tên CamelCase trong Program.cs.

Tệp .cs được tải xuống báo lỗi biên dịch trong dự án

Nguyên nhân có thể: ①.csproj chưa thêm phụ thuộc Newtonsoft.Json/System.Text.Json; ②Lớp được đặt trong thư mục không phù hợp (cần đặt trong thư mục gốc hoặc thư mục con của dự án .NET và tương ứng với namespace); ③Tên lớp xung đột với kiểu khác trong dự án. Giải pháp: thêm phụ thuộc, điều chỉnh thư mục và namespace, đổi tên lớp xung đột.

Khi nhận JSON trong ASP.NET Core xuất hiện lỗi "Cannot deserialize"

ASP.NET Core 3.0+ mặc định sử dụng System.Text.Json, nhưng [JsonProperty] do công cụ tạo là cú pháp Newtonsoft.Json. Hai giải pháp: ①Thêm gói Microsoft.AspNetCore.Mvc.NewtonsoftJson vào .csproj và gọi AddNewtonsoftJson() trong Program.cs; ②Thay đổi tất cả [JsonProperty("xxx")] được tạo thành [JsonPropertyName("xxx")] (cú pháp System.Text.Json).

Mảng là kiểu số nhưng tạo List<object>

Thường là khi mảng trống [] mặc định suy luận thành List<object>, vui lòng thêm ít nhất một phần tử mẫu (ví dụ [1,2,3]) vào JSON gốc, công cụ sẽ suy luận kiểu dựa trên phần tử đầu tiên; hoặc sau khi tạo thủ công thay đổi List<object> thành List<long>/List<int>.

Khi chuyển đổi JSON cực lớn trang bị treo

Khuyến nghị chia JSON thành nhiều module độc lập để chuyển đổi riêng biệt, hoặc chỉ trích xuất phần cần mô hình hóa. Trình duyệt sẽ tiêu thụ nhiều bộ nhớ khi hiển thị nhiều lớp lồng nhau, đối với JSON vượt quá 5MB khuyến nghị sử dụng NSwag hoặc tính năng tích hợp sẵn "Dán JSON dưới dạng các lớp" của Visual Studio.

Thuật ngữ

POCO (Plain Old CLR Object)
Viết tắt của "Đối tượng CLR thông thường" trong C#/.NET, các ràng buộc là: hàm tạo mặc định công khai + trường private + thuộc tính công khai { get; set; } + không phụ thuộc khung. Những gì công cụ này tạo ra là POCO tiêu chuẩn.
record
Kiểu đối tượng truyền dữ liệu bất biến được giới thiệu trong C# 9+, sử dụng đẳng thức giá trị thay vì đẳng thức tham chiếu. Sau khi tạo trong công cụ này có thể thủ công thay đổi thành record, phù hợp cho các kịch bản như DTO, mô hình phản hồi API, cấu hình bất biến.
[JsonProperty]
Thuộc tính ánh xạ trường của Newtonsoft.Json. Công cụ này mặc định thêm [JsonProperty("khóa gốc")] cho mỗi trường, đảm bảo tên trường PascalCase có thể giải tuần tự hóa chính xác JSON snake_case.
Newtonsoft.Json
Còn gọi là Json.NET, là thư viện JSON phổ biến nhất trong hệ sinh thái .NET. Có hệ sinh thái phong phú nhất và khả năng tương thích tốt nhất, được hỗ trợ bởi hầu hết các dự án .NET. Được sử dụng mặc định trước ASP.NET Core 3.0, sau 3.0 được thay thế bằng System.Text.Json, nhưng vẫn có thể tiếp tục tương thích thông qua gói NuGet.
System.Text.Json
Thư viện JSON hiệu năng cao được tích hợp sẵn trong .NET Core 3.0+. Khởi động nhanh, chiếm dụng bộ nhớ thấp, thân thiện với AOT, bao gồm [JsonPropertyName] (tương ứng với [JsonProperty] của Newtonsoft) và chính sách đặt tên tùy chỉnh JsonNamingPolicy.
Nullable<T>
Kiểu trong C# chỉ định rằng kiểu giá trị có thể là null (ví dụ long? / bool?). Công cụ này tự động suy luận trường null trong JSON thành Nullable<T> để tránh ngoại lệ tham chiếu null tại thời gian biên dịch.
List<T>
Kiểu danh sách generic trong khung tập hợp .NET. Công cụ này tự động chuyển đổi mảng JSON thành List<T>, T được suy luận tự động từ phần tử đầu tiên của mảng (ví dụ ["a"] → List<string>).
namespace
Từ khóa không gian tên trong C# để tổ chức các lớp, tương tự như package trong Java. Mã do công cụ này tạo ra mặc định không có namespace, có thể thêm thủ công (ví dụ namespace MyApp.Models).
ASP.NET Core
Khung web nguồn mở đa nền tảng của Microsoft. Các lớp POCO do công cụ này tạo ra có thể được sử dụng trực tiếp trong các kịch bản như ràng buộc mô hình ASP.NET Core Controller [FromBody], Minimal API, tham số thành phần Blazor.
Unity
Công cụ game phổ biến nhất thế giới, ngôn ngữ script là C#. Các lớp POCO do công cụ này tạo ra có thể được sử dụng để phân tích phản hồi API mạng Unity, mô hình hóa dữ liệu cấu hình ScriptableObject.
Snake_case → PascalCase
Chuyển đổi quy tắc đặt tên trường. Chuyển đổi đặt tên snake_case (ví dụ user_name, created_at) thành đặt tên PascalCase (ví dụ UserName, CreatedAt), tuân thủ quy phạm đặt tên chính thức của .NET.
quicktype-core
Thư viện tạo kiểu JSON đa ngôn ngữ nguồn mở (dự án quicktype) mà công cụ này phụ thuộc cơ bản, hỗ trợ hơn mười ngôn ngữ bao gồm C#, Java, TypeScript, Rust, Go, Swift, v.v., thực thi trên trình duyệt dựa trên TypeScript + WebAssembly.
.NET MAUI
Khung UI đa nền tảng của Microsoft (.NET Multi-platform App UI), mã C# có thể chia sẻ trên iOS/Android/Windows/macOS. POCO do công cụ này tạo ra phù hợp làm Model cho ràng buộc dữ liệu XAML trong MAUI.
Blazor
Khung SPA dựa trên WebAssembly của Microsoft, có hai chế độ Server và WebAssembly. Các lớp C# do công cụ này tạo ra có thể được sử dụng cho tham số thành phần Blazor, mô hình phản hồi API kiểu mạnh, nâng cao hiệu quả phát triển toàn ngăn xếp một ngôn ngữ.
HttpClient.GetFromJsonAsync
Phương thức mở rộng .NET 5+/System.Net.Http.Json, hoàn thành HTTP GET + giải tuần tự hóa JSON trong một dòng. Kết hợp với POCO do công cụ này tạo ra có thể đơn giản hóa đáng kể mã client API HTTP.
JsonNamingPolicy
Lớp trong System.Text.Json kiểm soát quy tắc ánh xạ giữa tên trường JSON và tên thuộc tính C# (ví dụ CamelCase, SnakeCaseLower). Newtonsoft.Json thực hiện thông qua chú thích [JsonProperty] hoặc ContractResolver.
IOptions<T>
Giao diện cốt lõi của mẫu Options trong .NET, liên kết cấu trúc con appsettings.json với lớp kiểu mạnh. POCO do công cụ này tạo ra có thể kết hợp với IConfiguration.Bind trực tiếp làm triển khai IOptions<T>.

Bảng tra cứu nhanh ánh xạ kiểu JSON sang kiểu C#

Công cụ tự động suy luận kiểu .NET/C# tương ứng dựa trên kiểu giá trị JSON:

Ví dụ giá trị JSONKiểu C# tạo raĐịnh dạng NullableMô tả
nullSuy luận theo ngữ cảnhT?Trường giá trị null tự động suy luận thành Nullable<T> (ví dụ long? / bool? / string?)
true / falseboolbool?Giá trị boolean JSON ánh xạ trực tiếp sang bool C#
42longlong?Số nguyên JSON mặc định ánh xạ sang long (số nguyên 64-bit, tương thích số lớn)
3.14doubledouble?Số thực dấu phẩy động JSON mặc định ánh xạ sang double (số thực dấu phẩy động độ chính xác kép)
"hello"stringstring?Chuỗi JSON ánh xạ sang string C#
["a","b"]List<string>List<string>?Mảng chuỗi ánh xạ sang List<string>
[1,2,3]List<long>List<long>?Mảng số nguyên ánh xạ sang List<long>
[{...},{...}]List<Item>List<Item>?Mảng đối tượng trước tiên tạo class tương ứng cho phần tử đầu tiên sau đó bọc bằng List
[]List<object>List<object>?Mảng trống không thể suy luận kiểu phần tử, mặc định hạ cấp thành object, khuyến nghị sau khi tạo thủ công thay đổi thành kiểu cụ thể
{...} đối tượng lồng nhauclass độc lậpClassName?Đối tượng lồng nhau tạo class độc lập, đặt tên bằng cách viết hoa chữ cái đầu tên trường (address → Address)

Bảng so sánh chú thích Newtonsoft.Json và System.Text.Json

So sánh thuộc tính ánh xạ trường của hai thư viện JSON chính thống trong hệ sinh thái .NET. Công cụ này mặc định tạo [JsonProperty] tương thích Newtonsoft:

Mục so sánhNewtonsoft.JsonSystem.Text.Json
Thuộc tính ánh xạ trường[JsonProperty("user_name")][JsonPropertyName("user_name")]
Chính sách đặt tên mặc địnhGiữ nguyên tên trường PascalCase (snake_case cần [JsonProperty])Giữ nguyên tên trường gốc (khớp theo khóa JSON, mặc định CamelCase)
Đặt tên tùy chỉnhChỉ định từng trường bằng [JsonProperty][JsonPropertyName] + cài đặt toàn cục JsonNamingPolicy
Xử lý giá trị nullNullValueHandling.Ignore / IncludeJsonIgnoreCondition.WhenWritingNull
Phiên bản .NET tích hợp.NET Framework / .NET Core / .NET 5+.NET Core 3.0+ / .NET 5+
Cách cài đặtNuGet: Newtonsoft.JsonTích hợp sẵn (không cần cài đặt)
Hiệu năngTrung bìnhCao (khởi động nhanh, chiếm dụng bộ nhớ thấp)
Hỗ trợ AOTCần source generatorHỗ trợ gốc
Kịch bản áp dụngDự án .NET cũ, phụ thuộc thư viện bên thứ ba, hệ sinh thái phong phúASP.NET Core 3.0+, kịch bản hiệu năng cao, .NET MAUI / Blazor

Privacy & Security

Tất cả các hoạt động của công cụ chuyển đổi JSON sang C# này được hoàn thành hoàn toàn cục bộ trên trình duyệt của bạn: phân tích JSON, tạo mã C# và tải xuống tệp đều được thực thi ở phía khách hàng thông qua JavaScript + WebAssembly (quicktype-core) của trình duyệt, không gửi nội dung JSON, tệp đã tải lên hoặc mã được tạo đến bất kỳ máy chủ nào qua mạng. Việc tải lên tệp sử dụng API FileReader gốc của trình duyệt để đọc trực tiếp vào bộ nhớ, không đi qua bất kỳ dịch vụ trung gian nào. Không sử dụng theo dõi Cookie, không thu thập dữ liệu đầu vào của người dùng hoặc dữ liệu hành vi sử dụng. Sau khi đóng hoặc làm mới trang, tất cả nội dung đầu vào và đầu ra sẽ tự động bị xóa khỏi bộ nhớ. Phù hợp để xử lý JSON chứa khóa API, mã thông báo, dữ liệu nghiệp vụ nhạy cảm.

Authoritative References