Từ JSON đến lớp C#
Dán một mẫu JSON để nhận các lớp POCO trong C# sẵn sàng dùng cho việc chèn vào tệp .cs. Hệ thống tự động chọn các kiểu dữ liệu phù hợp, xử lý đối tượng lồng nhau với các định nghĩa lớp bổ sung, hỗ trợ các kiểu tham chiếu có thể bỏ trống, và tạo ra thuộc tính System.Text.Json hoặc Newtonsoft.Json tùy theo yêu cầu của dự án.
Cách chuyển đổi JSON sang C#
-
1
Dán JSON
Chỉ cần một mẫu là đủ; sử dụng nhiều mẫu sẽ giúp cải thiện khả năng suy luận đối với các giá trị có thể bị bỏ trống và các phần tử trong mảng.
-
2
Chọn phong cách
System.Text.Json (.NET 6+) hoặc Newtonsoft.Json (phiên bản cũ). Các tên thuộc tính PascalCase kèm `[JsonPropertyName]` cho JSON ở định dạng camelCase.
-
3
Chọn phiên bản C# mục tiêu
C# 10+ dành cho không gian tên trong bản ghi và tệp tin; C# 8 dành cho các kiểu tham chiếu có thể bị bỏ sót (nullable); hoặc các phiên bản cũ hơn để đảm bảo tính tương thích tối đa.
-
4
Sao chép các lớp
Một lớp gốc cùng các lớp con dành cho từng hình dạng đối tượng, tất cả đều được lưu trong một tệp duy nhất và sẵn sàng để sử dụng ngay trong dự án của bạn.
Ví dụ về kết quả đầu ra
Đối với dữ liệu đầu vào:
{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }
Kết quả đầu ra System.Text.Json (C# 10+):
public class User
{
[JsonPropertyName("firstName")]
public string FirstName { get; set; } = default!;
[JsonPropertyName("age")]
public int Age { get; set; }
[JsonPropertyName("emails")]
public List<string> Emails { get; set; } = new();
[JsonPropertyName("address")]
public Address Address { get; set; } = default!;
}
public class Address
{
[JsonPropertyName("city")]
public string City { get; set; } = default!;
}
Xác định kiểu dữ liệu
| JSON | Loại C# |
|---|---|
| chuỗi văn bản | string |
| số nguyên | int (hoặc long nếu giá trị lớn hơn int.MaxValue) |
| số (thập phân) | double (hoặc decimal nếu được chọn) |
| giá trị luận lý | bool |
| null | object? (hoặc hợp nhất với trường liền kề) |
| ngày ISO-8601 | DateTime (hoặc DateOnly) |
| Chuỗi dạng GUID | Guid |
| mảng chuỗi | List<string> |
| đối tượng | lớp lồng ghép |
Các tùy chọn thuộc tính
- System.Text.Json (
[JsonPropertyName("foo")]) – được ưu tiên cho các dự án .NET 6+ và các dự án mới. - Newtonsoft.Json (
[JsonProperty("foo")]) – dùng cho các dự án cũ hoặc khi cần các tính năng riêng của Newtonsoft. - Không có, tên thuộc tính trùng khớp hoàn toàn với các khóa JSON (chỉ hoạt động khi các khóa JSON đã ở định dạng PascalCase).
Các lỗi phổ biến
- Sử dụng
intcho trường có nguy cơ vượt giới hạn giá trị. Nếu dữ liệu JSON của bạn chứa các giá trị lớn hơnint.MaxValue, hãy sử dụnglong. Bộ tạo sẽ tự động chuyển sang sử dụnglongkhi phát hiện các giá trị lớn. – Thiếu[JsonIgnore]đối với các thuộc tính tính toán. Nếu bạn thêm các thuộc tính hỗ trợ vào lớp được tạo ra, hãy gắn[JsonIgnore]cho chúng; nếu không, chúng sẽ được tuần tự hóa khi xuất ra. – Bỏ qua việc phân tích không phụ thuộc vào văn hóa. Các trường củadecimalcần được giải mã bằngCultureInfo.InvariantCulture; System.Text.Json thực hiện điều này mặc định, trong khi Newtonsoft sử dụng thiết lập toàn cục để thực hiện. - Đặt niềm tin vào bộ sinh dữ liệu chỉ dựa trên một mẫu duy nhất. Các tính chất như khả năng bị xóa bỏ (nullable) và loại dữ liệu của các phần tử mảng sẽ được suy đoán từ những gì bộ sinh dữ liệu nhận được. Luôn kiểm tra tính hợp lý của các chú thích về tính khả năng bị xóa bỏ so với hành vi thực tế của API.
Câu hỏi thường gặp
Đối với các dự án mới trên .NET 6+ hãy sử dụng System.Text.Json – phương thức này nhanh hơn, được tích hợp sẵn và hiện hỗ trợ gần như mọi tính năng của Newtonsoft. Đối với các dự án cũ hoặc khi cần sử dụng các tính năng cụ thể của Newtonsoft (như bộ giải quyết hợp đồng tùy chỉnh, JObject và xử lý động), hãy dùng Newtonsoft.
Trong C# 10+, các đối tượng kiểu dữ liệu (DTO) không thể thay đổi được thường được biểu diễn bằng các bản ghi – cách này đảm bảo tính tương đương về giá trị và cú pháp ngắn gọn. Các lớp lại phù hợp hơn khi cần khả năng biến đổi hoặc tương thích với hệ thống cũ. Công cụ cho phép bạn lựa chọn phương án phù hợp tùy theo yêu cầu.
Nếu dự án của bạn sử dụng các kiểu tham chiếu có thể là null (C# 8+), các trường được ghi nhận là null trong mọi mẫu dữ liệu sẽ được đánh dấu là string?, int?, v.v. Nếu không sử dụng NRT, tính khả năng là null chỉ được báo hiệu đối với các kiểu giá trị (ví dụ: int?).
Các mảng hỗn hợp gồm các đối tượng có hình dạng khác nhau không thể được biểu diễn trực tiếp trong C# có kiểu dữ liệu rõ ràng. Công cụ sẽ tự động suy luận một lớp cơ sở chung hoặc lớp dự phòng là object; đối với các mảng hỗn hợp, bạn thường cần thiết kế lại định nghĩa JSON.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Trình định dạng HTML
Định dạng HTML cục bộ trong trình duyệt với thụt lề hai hoặc bốn khoảng trắng. HTML không được tải lên hoặc xác thực.
Bảng tra cứu nhanh Markdown
Tài liệu Markdown thực dụng với bản xem trước thực tế và ví dụ có thể sao chép cho tiêu đề, danh sách, bảng, mã, liên kết, hình ảnh và cú pháp GFM.
Bộ tạo gradient CSS
Tạo gradient CSS tuyến tính và hướng tâm với các điểm màu cùng điều khiển góc hoặc hình dạng. Sao chép khai báo nền CSS đã tạo vào stylesheet của bạn.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- JSON zu C# Klasse [DE]
- JSON para Classe C# [PT]
- JSON을 C# 클래스로 [KO]
- JSON ถึงคลาสใน C# [TH]
- تحويل JSON إلى فئة C# [AR]
- JSON till C#-klass [SV]
- JSON naar C#-klasse [NL]
- JSON vers classe C# [FR]
- JSON na klasę C# [PL]
- JSON ke Kelas C# [ID]
- JSONからC#クラスへ [JA]
- JSON a Clase C# [ES]
- JSON to C# Class [EN]
- JSON in classe C# [IT]
- JSON в класс C# [RU]
- JSON'ten C# Sınıfına [TR]
- 从 JSON 到 C# 类 [ZH]