การแปลง JSON เป็น C# คืออะไร?การแปลง JSON เป็น C# คือกระบวนการสร้างนิยาม C# class ที่มีการกำหนดประเภทอย่างชัดเจนจากข้อมูล JSON เมื่อแอปพลิเคชัน .NET ได้รับ JSON จาก API, ไฟล์กำหนดค่า หรือ message queue จำเป็นต้องมี C# classes เพื่อ deserialize ข้อมูลนั้นเป็น objects การเขียน classes เหล่านี้ด้วยมือเป็นงานที่น่าเบื่อและเกิดข้อผิดพลาดได้ง่าย โดยเฉพาะเมื่อ JSON มี nested objects, arrays และประเภทผสม
เครื่องมือสร้าง C# class จาก JSON จะตรวจสอบโครงสร้างและค่าใน JSON ของคุณ อนุมานประเภท C# ที่เหมาะสมสำหรับแต่ละ field และสร้างนิยาม class พร้อม property accessors และ serialization attributes ผลลัพธ์เป็นไปตามแบบแผนการตั้งชื่อของ .NET ได้แก่ ชื่อ property แบบ PascalCase, JsonPropertyName attributes สำหรับแมปกับ JSON keys เดิมที่เป็น camelCase หรือ snake_case และการใช้ List'<'T'>' สำหรับ arrays อย่างถูกต้อง
การแปลงนี้พบบ่อยโดยเฉพาะใน ASP.NET Core web APIs, Azure Functions และบริการ .NET ใดก็ตามที่ใช้ข้อมูล JSON จากภายนอก แทนที่จะใช้ dynamic หรือ Dictionary'<'string, object'>' การใช้ typed classes ให้ความปลอดภัยในระหว่าง compile, รองรับ IntelliSense และป้องกันข้อผิดพลาดจากการพิมพ์ชื่อ field ผิดซึ่งจะไม่พบจนกว่าจะถึง runtime วาง JSON ลงในเครื่องมือนี้และรับ C# classes ที่พร้อมใช้งานทันที
ทำไมต้องใช้เครื่องมือสร้าง C# จาก JSON?การเขียน C# model classes จาก JSON ด้วยมือใช้เวลามากและเกิดข้อผิดพลาดของมนุษย์ได้ เครื่องมือสร้างอัตโนมัติจัดการส่วนที่ซ้ำซากเพื่อให้คุณโฟกัสกับ business logic ได้
⚡ สร้าง class ทันที
วาย JSON แล้วรับ C# classes ที่สมบูรณ์ในเวลาไม่ถึงวินาที ไม่ต้องพิมพ์ property ด้วยมือ ไม่ต้องกังวลว่าจะลืม field ใด
🔒 ข้อมูลของคุณเป็นส่วนตัว
การแปลงทั้งหมดทำงานในเบราว์เซอร์ของคุณ ข้อมูล JSON ไม่ออกจากเครื่อง ดังนั้น API keys, tokens และข้อมูลส่วนบุคคลจึงปลอดภัย
📋 การแมป attribute ที่ถูกต้อง
Classes ที่สร้างขึ้นมี JsonPropertyName attributes ที่แมป C# properties แบบ PascalCase กับชื่อ JSON key เดิม ป้องกันปัญหา deserialization ที่ไม่ตรงกัน
🌐 ไม่ต้องสร้างบัญชีหรือติดตั้ง
เปิดหน้าและวาย JSON ไม่มี NuGet packages ที่ต้องติดตั้ง ไม่มี Visual Studio extensions ที่ต้องกำหนดค่า ไม่มีฟอร์มสมัครสมาชิก
กรณีใช้งาน JSON เป็น C#การเชื่อมต่อ Backend API
สร้าง request และ response models สำหรับ REST APIs ของ third-party วาย JSON ตัวอย่างจากเอกสาร API และรับ C# classes ที่พร้อมใช้สำหรับการเรียก HttpClient
ASP.NET Core Controllers
สร้าง model classes สำหรับพารามิเตอร์ของ action methods เมื่อ endpoint รับ JSON body class ที่สร้างขึ้นจะช่วยให้มี model binding และ validation อัตโนมัติ
Azure Functions และ Serverless
สร้าง input และ output bindings สำหรับ Azure Functions ที่ประมวลผล JSON messages จาก queues, event hubs หรือ HTTP triggers
การ Deserialize กำหนดค่า
แปลงส่วน appsettings.json หรือไฟล์กำหนดค่าภายนอกเป็น typed C# options classes สำหรับใช้กับ IOptions'<'T'>' ใน dependency injection
Database Seeding และ Migration
แปลงไฟล์ JSON fixture เป็น C# objects สำหรับข้อมูล seed ของ Entity Framework, การตั้งค่า integration tests หรือ scripts ในการย้ายข้อมูล
การเรียนรู้ระบบประเภทของ C#
นักศึกษาและนักพัฒนาที่เพิ่งเริ่มใช้ .NET สามารถดูว่าประเภท JSON แมปกับประเภท C# อย่างไร ทำความเข้าใจ property accessors และเรียนรู้เกี่ยวกับ serialization attributes จากตัวอย่าง
ตารางอ้างอิงการแมปประเภท JSON เป็น C#ค่า JSON แต่ละประเภทแมปกับประเภท C# เฉพาะเจาะจง เครื่องมือสร้างจะวิเคราะห์ค่าจริงเพื่อเลือกประเภทที่แม่นยำที่สุด ตัวอย่างเช่น ตัวเลข JSON ที่ไม่มีจุดทศนิยมจะกลายเป็น int ขณะที่ 3.14 จะกลายเป็น double ค่า null จะสร้าง object? (nullable reference type) เนื่องจากไม่สามารถอนุมานประเภทจริงจาก null เพียงอย่างเดียวได้
ประเภท JSON ตัวอย่าง ประเภท C# string "hello" string number (int) 42 int number (float) 3.14 double boolean true, false bool null null object? object {"key": "value"} nested class array [1, 2, 3] List<int> array of objects [{"id": 1}] List<ClassName>
System.Text.Json กับ Newtonsoft.Json.NET มี JSON serialization libraries หลักสองตัว Classes ที่สร้างจากเครื่องมือนี้ใช้ System.Text.Json attributes (JsonPropertyName) ซึ่งเป็นตัวเลือกที่ built-in ตั้งแต่ .NET Core 3.0 หากโปรเจกต์ของคุณใช้ Newtonsoft.Json คุณสามารถเปลี่ยน attributes ได้
System.Text.Json
Built-in ใน .NET ตั้งแต่ Core 3.0 เร็วกว่าและใช้หน่วยความจำน้อยกว่า Newtonsoft ใช้ [JsonPropertyName] สำหรับการแมป property เป็นตัวเลือกเริ่มต้นสำหรับโปรเจกต์ .NET 6+ ใหม่ ไม่รองรับ Newtonsoft features ทั้งหมด เช่น JsonPath หรือ reference handling นอกกรอบ
Newtonsoft.Json
ไลบรารี JSON ดั้งเดิมของ .NET (Json.NET) ใช้ [JsonProperty] สำหรับการแมป property รองรับ scenarios ขั้นสูงกว่า ได้แก่ polymorphic serialization, JsonPath queries และ custom converters ที่ยืดหยุ่นกว่า ยังพบบ่อยใน codebases เก่าและโปรเจกต์ที่ต้องการ features ที่ System.Text.Json ยังขาดอยู่
ตัวอย่างโค้ดตัวอย่างเหล่านี้แสดงวิธีนิยามและใช้ C# classes ที่สร้างจาก JSON โดยใช้ทั้ง serialization libraries หลัก รวมถึงวิธีการสร้างอัตโนมัติจาก command line
C# (System.Text.Json) Copy
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) Copy
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) Copy
// 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) Copy
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)) คำถามที่พบบ่อยJsonPropertyName กับ JsonProperty ต่างกันอย่างไร?
JsonPropertyName เป็น attribute จาก System.Text.Json ซึ่งเป็น .NET serializer ที่ built-in ส่วน JsonProperty มาจาก Newtonsoft.Json (Json.NET) ซึ่งเป็น third-party library ทั้งสองแมปชื่อ C# property กับชื่อ JSON field แต่อยู่ใน namespaces ต่างกันและใช้แทนกันไม่ได้ ใช้ JsonPropertyName สำหรับโปรเจกต์ .NET 6+ ใหม่ และใช้ JsonProperty หากโปรเจกต์ของคุณขึ้นอยู่กับ Newtonsoft อยู่แล้ว
เครื่องมือสร้างจัดการ nested JSON objects อย่างไร?
แต่ละ nested object จะกลายเป็น C# class ของตัวเอง Property ในคลาสแม่จะใช้คลาสที่ซ้อนอยู่เป็นประเภทของมัน ตัวอย่างเช่น หาก JSON ของคุณมี field ชื่อ "address" ที่มี object ที่ประกอบด้วย "street" และ "city" เครื่องมือสร้างจะสร้าง class ชื่อ Address และกำหนดประเภทของ property เป็น Address ในคลาสแม่
เกิดอะไรขึ้นกับ JSON arrays ที่มีประเภทผสม?
เครื่องมือสร้างอนุมานประเภท element ของ array จาก element แรกที่ไม่ใช่ null หาก array มีประเภทผสม (strings และตัวเลขรวมกัน) ประเภทที่สร้างขึ้นจะถอยไปใช้ List'<'object'>' ในทางปฏิบัติ API responses ที่มีโครงสร้างดีแทบไม่มีการผสมประเภทภายใน array เดียว
ใช้ classes ที่สร้างขึ้นกับ Entity Framework ได้ไหม?
ได้ แต่คุณจะต้องเพิ่ม EF-specific annotations เช่น [Key], [Required] หรือ [Column] attributes Classes ที่สร้างขึ้นให้โครงสร้าง property แก่คุณ ใช้เป็น scaffold และเพิ่มการกำหนดค่า EF ทับลงไป EF ยังต้องการ constructor ที่ไม่มีพารามิเตอร์ ซึ่ง classes ที่สร้างขึ้นมีให้อยู่แล้วโดยค่าเริ่มต้น
ค่า null ใน JSON แปลงเป็น C# อย่างไร?
ค่า JSON null จะสร้างประเภท object? เนื่องจากเครื่องมือสร้างไม่สามารถระบุประเภทที่ต้องการได้จาก null เพียงอย่างเดียว หลังจากสร้างแล้ว คุณควรแทนที่ object? ด้วย nullable type ที่ถูกต้อง (string?, int? หรือ class เฉพาะ?) ตามความรู้ของคุณเกี่ยวกับ API schema
JSON แบบ camelCase แมปกับ C# properties แบบ PascalCase อัตโนมัติไหม?
ใช่ เครื่องมือสร้างแปลง JSON keys อย่างเช่น "firstName" เป็น PascalCase properties อย่างเช่น FirstName และเพิ่ม attribute [JsonPropertyName("firstName")] ซึ่งทำให้ serializer แมประหว่างแบบแผนการตั้งชื่อทั้งสองอย่างอัตโนมัติระหว่าง serialization และ deserialization
จัดการ JSON ที่มี optional fields ใน C# อย่างไร?
กำหนดประเภท property เป็น nullable (เช่น string? หรือ int?) และตั้งค่าเริ่มต้น ด้วย System.Text.Json คุณยังสามารถกำหนดค่า JsonSerializerOptions.DefaultIgnoreCondition เพื่อข้าม null values ระหว่าง serialization เครื่องมือสร้างสร้างประเภท non-nullable โดยค่าเริ่มต้น ดังนั้นให้ตรวจสอบและปรับ nullability ตาม API contract ของคุณ