JSON sang Lớp C#

Tạo lớp C# từ JSON

Thử ví dụ
Tên lớp gốc:

Đầu vào JSON

Đầu ra C#

Chạy cục bộ · An toàn để dán thông tin bí mật
Các lớp C# sẽ hiển thị ở đây…

Chuyển đổi JSON sang C# là gì?

Chuyển đổi JSON sang C# là quá trình tạo các định nghĩa lớp C# có kiểu chặt chẽ từ dữ liệu JSON. Khi một ứng dụng .NET nhận JSON từ API, file cấu hình, hoặc hàng đợi tin nhắn, nó cần các lớp C# để giải tuần tự hóa dữ liệu đó thành đối tượng. Viết các lớp này bằng tay rất tẻ nhạt và dễ mắc lỗi, đặc biệt khi JSON chứa các đối tượng lồng nhau, mảng và kiểu hỗn hợp.

Bộ tạo lớp C# từ JSON kiểm tra cấu trúc và giá trị trong JSON của bạn, suy kiểu C# phù hợp cho từng trường, và tạo ra các định nghĩa lớp với bộ truy cập thuộc tính và thuộc tính tuần tự hóa. Đầu ra tuân theo quy ước đặt tên .NET: tên thuộc tính PascalCase, thuộc tính JsonPropertyName để ánh xạ sang các khóa JSON camelCase hoặc snake_case gốc, và sử dụng đúng List'<'T'>' cho mảng.

Việc chuyển đổi này đặc biệt phổ biến trong ASP.NET Core web API, Azure Functions, và bất kỳ dịch vụ .NET nào sử dụng dữ liệu JSON bên ngoài. Thay vì dùng dynamic hoặc Dictionary'<'string, object'>', các lớp có kiểu mang lại an toàn tại thời điểm biên dịch, hỗ trợ IntelliSense, và bảo vệ khỏi lỗi đánh máy tên trường mà nếu không sẽ chỉ xuất hiện lúc chạy. Dán JSON của bạn vào công cụ này và nhận các lớp C# sẵn dùng ngay lập tức.

Tại sao dùng bộ tạo JSON sang C#?

Viết thủ công các lớp model C# từ mẫu JSON tốn thời gian và dễ xảy ra lỗi. Bộ tạo xử lý các phần lặp đi lặp lại để bạn có thể tập trung vào logic nghiệp vụ.

Tạo lớp ngay lập tức
Dán JSON của bạn và nhận các lớp C# hoàn chỉnh trong chưa đến một giây. Không cần gõ thủ công từng thuộc tính, không lo bỏ sót trường.
🔒
Xử lý ưu tiên bảo mật
Toàn bộ quá trình chuyển đổi chạy trong trình duyệt. Dữ liệu JSON của bạn không bao giờ rời khỏi máy, vì vậy API key, token và thông tin cá nhân vẫn được bảo mật.
📋
Ánh xạ thuộc tính chính xác
Các lớp được tạo bao gồm thuộc tính JsonPropertyName ánh xạ các thuộc tính C# PascalCase sang tên khóa JSON gốc, ngăn ngừa lỗi không khớp khi giải tuần tự hóa.
🌐
Không cần tài khoản hay cài đặt
Mở trang và dán JSON. Không cần cài gói NuGet, không cần cấu hình extension Visual Studio, không cần điền form đăng ký.

Các trường hợp sử dụng JSON sang C#

Tích hợp API Backend
Tạo model request và response cho REST API bên thứ ba. Dán JSON mẫu từ tài liệu API và nhận các lớp C# sẵn dùng cho các lệnh gọi HttpClient.
ASP.NET Core Controllers
Tạo lớp model cho tham số action method. Khi endpoint của bạn nhận một body JSON, lớp được tạo cung cấp model binding và validation tự động.
Azure Functions & Serverless
Xây dựng input và output binding cho Azure Functions xử lý tin nhắn JSON từ queue, event hub, hoặc HTTP trigger.
Giải tuần tự hóa cấu hình
Chuyển đổi các phần appsettings.json hoặc file cấu hình bên ngoài thành các lớp options C# có kiểu để dùng với IOptions'<'T'>' trong dependency injection.
Seeding & Migration cơ sở dữ liệu
Chuyển đổi file JSON fixture thành đối tượng C# cho dữ liệu seed Entity Framework, cài đặt kiểm thử tích hợp, hoặc script migration dữ liệu.
Học hệ thống kiểu C#
Sinh viên và lập trình viên mới với .NET có thể thấy cách các kiểu JSON ánh xạ sang kiểu C#, hiểu về bộ truy cập thuộc tính, và học về thuộc tính tuần tự hóa qua ví dụ thực tế.

Bảng tham chiếu ánh xạ kiểu JSON sang C#

Mỗi kiểu giá trị JSON ánh xạ sang một kiểu C# cụ thể. Bộ tạo phân tích giá trị thực tế để chọn kiểu chính xác nhất. Ví dụ, một số JSON không có dấu thập phân trở thành int, trong khi 3.14 trở thành double. Giá trị null tạo ra object? (kiểu tham chiếu nullable) vì kiểu thực tế không thể suy ra từ null đơn thuần.

Kiểu JSONVí dụKiểu C#
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
object{"key": "value"}nested class
array[1, 2, 3]List<int>
array of objects[{"id": 1}]List<ClassName>

System.Text.Json vs Newtonsoft.Json

.NET có hai thư viện tuần tự hóa JSON chính. Các lớp được tạo từ công cụ này sử dụng thuộc tính System.Text.Json (JsonPropertyName), là tùy chọn tích hợp sẵn từ .NET Core 3.0. Nếu dự án của bạn dùng Newtonsoft.Json, bạn có thể hoán đổi các thuộc tính.

System.Text.Json
Tích hợp sẵn trong .NET từ Core 3.0. Nhanh hơn và tốn ít bộ nhớ hơn Newtonsoft. Dùng [JsonPropertyName] để ánh xạ thuộc tính. Lựa chọn mặc định cho các dự án .NET 6+ mới. Không hỗ trợ sẵn tất cả tính năng Newtonsoft như JsonPath hay xử lý tham chiếu.
Newtonsoft.Json
Thư viện JSON .NET gốc (Json.NET). Dùng [JsonProperty] để ánh xạ thuộc tính. Hỗ trợ các tình huống nâng cao hơn: tuần tự hóa đa hình, truy vấn JsonPath, converter tùy chỉnh linh hoạt hơn. Vẫn phổ biến trong codebase cũ và các dự án cần tính năng mà System.Text.Json thiếu.

Ví dụ mã nguồn

Các ví dụ này cho thấy cách định nghĩa và sử dụng các lớp C# được tạo từ JSON, dùng cả hai thư viện tuần tự hóa chính, cùng cách tự động hóa việc tạo từ dòng lệnh.

C# (System.Text.Json)
using System.Text.Json;

var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"

public class User
{
    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("active")]
    public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;

var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98

public class User
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("scores")]
    public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs

// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp

// Output:
// public class Root
// {
//     [JsonPropertyName("id")]
//     public int Id { get; set; }
//
//     [JsonPropertyName("name")]
//     public string Name { get; set; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

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

Sự khác nhau giữa JsonPropertyName và JsonProperty là gì?
JsonPropertyName là thuộc tính từ System.Text.Json, bộ tuần tự hóa .NET tích hợp sẵn. JsonProperty là từ Newtonsoft.Json (Json.NET), một thư viện bên thứ ba. Cả hai đều ánh xạ tên thuộc tính C# sang tên trường JSON, nhưng chúng thuộc các namespace khác nhau và không thể dùng thay thế nhau. Dùng JsonPropertyName cho các dự án .NET 6+ mới và JsonProperty nếu dự án của bạn đã phụ thuộc vào Newtonsoft.
Bộ tạo xử lý các đối tượng JSON lồng nhau như thế nào?
Mỗi đối tượng lồng nhau trở thành lớp C# riêng của nó. Thuộc tính trong lớp cha sử dụng lớp lồng nhau làm kiểu. Ví dụ, nếu JSON của bạn có trường "address" chứa đối tượng với "street" và "city", bộ tạo tạo ra lớp Address và đặt kiểu thuộc tính là Address trong lớp cha.
Điều gì xảy ra với mảng JSON chứa kiểu hỗn hợp?
Bộ tạo suy kiểu phần tử mảng từ phần tử không null đầu tiên. Nếu mảng chứa kiểu hỗn hợp (chuỗi và số cùng nhau), kiểu được tạo sẽ trở về List'<'object'>'. Trong thực tế, các phản hồi API có cấu trúc tốt hiếm khi trộn lẫn kiểu trong một mảng.
Tôi có thể dùng các lớp đã tạo với Entity Framework không?
Có, nhưng bạn sẽ cần thêm các annotation dành riêng cho EF như [Key], [Required], hoặc [Column]. Các lớp được tạo cung cấp cấu trúc thuộc tính; hãy coi chúng như scaffold và thêm cấu hình EF lên trên. EF cũng yêu cầu constructor không tham số, mà các lớp được tạo đã có sẵn theo mặc định.
Giá trị null trong JSON được chuyển đổi sang C# như thế nào?
Giá trị null trong JSON tạo ra kiểu object? vì bộ tạo không thể xác định kiểu dự kiến từ null đơn thuần. Sau khi tạo, bạn nên thay object? bằng kiểu nullable đúng (string?, int?, hoặc một lớp cụ thể?) dựa trên hiểu biết của bạn về schema API.
JSON camelCase có được tự động ánh xạ sang thuộc tính C# PascalCase không?
Có. Bộ tạo chuyển đổi các khóa JSON như "firstName" thành thuộc tính PascalCase như FirstName và thêm thuộc tính [JsonPropertyName("firstName")]. Điều này đảm bảo bộ tuần tự hóa ánh xạ giữa hai quy ước đặt tên tự động trong quá trình tuần tự hóa và giải tuần tự hóa.
Làm thế nào để xử lý JSON với các trường tùy chọn trong C#?
Đặt kiểu thuộc tính là nullable (ví dụ string? hoặc int?) và thiết lập giá trị mặc định. Với System.Text.Json, bạn cũng có thể cấu hình JsonSerializerOptions.DefaultIgnoreCondition để bỏ qua giá trị null trong quá trình tuần tự hóa. Bộ tạo tạo ra các kiểu không nullable theo mặc định, vì vậy hãy xem xét và điều chỉnh tính nullable dựa trên hợp đồng API của bạn.