JSON เป็น C#
ยังไม่มีเนื้อหา
เครื่องมือออนไลน์ฟรี JSON เป็น C# แปลงการตอบกลับ API หรือ JSON การกำหนดค่าเป็นคลาส C# มาตรฐานในคลิกเดียว ใช้โดยตรงในโปรเจกต์ ASP.NET Core, Unity, Blazor, .NET MAUI รองรับอธิบาย [JsonProperty], List generic, 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 ฯลฯ ในระหว่างการพัฒนา มักจำเป็นต้องแปลงตัวอย่าง JSON ในเอกสาร API หรือการตอบกลับจริงเป็นประเภท C# การเขียนคลาสด้วยตนเองไม่เพียงแต่ต้องใช้แรงงานซ้ำๆ มาก แต่ยังมีแนวโน้มที่จะเขียนผิดประเภทฟิลด์และอธิบายอีกด้วย ดังนั้นเครื่องมือนี้มีจุดมุ่งหมายเพื่อทำให้กระบวนการนี้เป็นอัตโนมัติ
เครื่องมือนี้ทำงานในเบราว์เซอร์ตาม quicktype-core ใช้ตัวเรนเดอร์ C# เพื่อสร้างโค้ดคลาส POCO มาตรฐาน ผลลัพธ์ค่าเริ่มต้นมี using System.Collections.Generic; และอธิบาย [JsonProperty("คีย์ดั้งเดิม")] (โหมดเข้ากันได้กับ Newtonsoft.Json) สามารถเปิดใน Visual Studio เพื่อคอมไพล์โดยตรง มันไม่ใช่แค่ร่างประเภท แต่เป็นคลาส C# ที่สามารถใช้ได้ทันทีหลังจากวางลงในโปรเจกต์ .NET ร่วมกับแพ็กเกจ NuGet
การสรุปประเภทเป็นแกนหลักของ JSON เป็น C# เครื่องมือแมปประเภทพื้นฐานของ JSON กับประเภทมาตรฐาน .NET: สตริง→string, จำนวนเต็ม→long, จำนวนทศนิยม→double, บูลีน→bool, อาร์เรย์→List<T>, วัตถุที่ซ้อนกัน→คลาสอิสระ, ค่า null→Nullable<T> (เช่น long? / bool? / string?) สำหรับวัตถุที่ซ้อนกัน เครื่องมือจะสร้างคลาสใหม่สำหรับแต่ละระดับอัตโนมัติและตั้งชื่อโดยทำให้ตัวอักษรแรกของชื่อฟิลด์เป็นตัวพิมพ์ใหญ่ เช่น ฟิลด์ address จะสร้างคลาส Address อ็อบเจกต์ในอาร์เรย์ items จะสร้างคลาส Item
การรวมเข้ากับไวยากรณ์ C# สมัยใหม่: เครื่องมือนี้สร้าง POCO ที่สามารถซีเรียลไลซ์ได้ (คุณสมบัติสาธารณะ { get; set; }) เป็นค่าเริ่มต้น สำหรับโปรเจกต์ที่เน้นความไม่เปลี่ยนแปลง นักพัฒนาสามารถเปลี่ยน class เป็นประเภท record C# 9+ และเปลี่ยน { 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# และการดาวน์โหลดไฟล์ทั้งหมดทำในเครื่อง จะไม่ส่งข้อมูลไปยังเซิร์ฟเวอร์ใดๆ สิ่งนี้มีความสำคัญอย่างยิ่งสำหรับ JSON ที่มีคีย์ API ฟิลด์ความเป็นส่วนตัวของผู้ใช้ โครงสร้างธุรกิจที่ไม่ได้เปิดเผย หลังจากปิดหน้า ข้อมูลจะถูกลบออกจากหน่วยความจำ
ควรทราบว่าโค้ดที่สร้างอัตโนมัติเป็นจุดเริ่มต้น ไม่ใช่จุดสิ้นสุด เครื่องมือสรุปประเภทตามตัวอย่าง JSON ไม่สามารถกำหนดประเภทที่ถูกต้องมากขึ้นในตรรกะทางธุรกิจได้ (เช่น ประเภทเชิงความหมายเช่น URL, อีเมล, ID ทั้งหมดจะถูกสรุปเป็น string) สำหรับฟิลด์ JSON snake_case ฟิลด์ C# จะรักษาการตั้งชื่อ PascalCase (user_name → UserName) แต่อธิบาย [JsonProperty] จะเก็บคีย์ดั้งเดิม การแมปอัตโนมัติเมื่อดีซีเรียลไลซ์ แนะนำให้ถือว่าผลลัพธ์ที่สร้างขึ้นเป็นร่างแรก จากนั้นปรับแต่งชื่อฟิลด์ ประเภท แอตทริบิวต์ตามข้อมูลจำเพาะของโปรเจกต์
กรณีการใช้งาน
- ASP.NET Core Web API: แปลง JSON ตัวอย่างในเอกสาร OpenAPI/Swagger เป็นคลาส DTO ใช้ร่วมกับการผูกโมเดล [FromBody] เพื่อรับคำขอจากฟรอนต์เอนด์
- ASP.NET Core MVC: แปลงเนื้อหาคำขอฟอร์ม/JSON เป็น Model ประเภทแข็งแรง ใช้ร่วมกับการตรวจสอบ ModelState อัตโนมัติ
- ดีซีเรียลไลซ์ Newtonsoft.Json: แปลง JSON การตอบกลับอินเทอร์เฟซของบุคคลที่สามเป็นคลาส POCO พร้อม [JsonProperty] ไม่จำเป็นต้องแมปฟิลด์ด้วยตนเอง
- สถานการณ์ประสิทธิภาพสูง System.Text.Json: แปลง JSON เป็นประเภท record หรือคุณสมบัติ init-only ใช้ร่วมกับ JsonSerializer.Deserialize<T> เพื่อเพิ่มความเร็วในการเริ่มต้น
- สคริปต์เกม Unity: แปลง JSON ที่ส่งกลับโดย API เครือข่าย (ข้อมูลผู้เล่น การกำหนดค่าด่าน ไอเท็มร้านค้า อันดับ) เป็นโมเดลข้อมูล ScriptableObject ที่สามารถซีเรียลไลซ์ได้
- แอปข้ามแพลตฟอร์ม .NET MAUI: แปลง JSON จาก API แบ็กเอนด์เป็นคลาส Model ใช้ในการผูกข้อมูล XAML แชร์โมเดลธุรกิจบน iOS/Android/Windows
- Blazor Server / WebAssembly: แปลง JSON จาก API เป็นพารามิเตอร์คอมโพเนนต์/โมเดลเซิร์ฟเวอร์ประเภทแข็งแรง ใช้ร่วมกับ @inject HttpClient เพื่อใช้ประเภทร่วมกันฟรอนต์เอนด์/แบ็กเอนด์
- Entity Framework Core: แปลงเอกสาร JSON ที่ส่งออกจากฐานข้อมูลเป็นคลาสเอนทิตี ใช้เป็นคลาสพื้นฐานอ้างอิงสำหรับการย้ายโมเดล EF Core ใช้ร่วมกับอธิบายข้อมูลเช่น [Key]/[Required]
- Azure Functions / AWS Lambda: แปลง JSON จากเหตุการณ์ทริกเกอร์ Event Grid/SNS/API Gateway/Cosmos DB เป็นพารามิเตอร์เหตุการณ์ประเภทแข็งแรง ลดความซับซ้อนของลายเซ็นฟังก์ชันเซิร์ฟเวอร์เลส
- การสื่อสารแบบเรียลไทม์ SignalR: แปลงข้อความ JSON ที่ส่งจากเซิร์ฟเวอร์ (แชท การแจ้งเตือน ราคา ข้อมูล IoT) เป็นประเภท C# ใช้เป็นประเภทแข็งแรงในเมธอด Hub
- สัญญาอินเทอร์เฟซไมโครเซอร์วิส: แปลงตัวอย่าง JSON คำขอ/การตอบกลับ RPC ระหว่างบริการ (gRPC-Web/HTTP/WCF) เป็นคลาส C# ใช้เป็นคำจำกัดความสัญญาร่วมกันระหว่างทีมหลายทีม
- โหลดไฟล์การกำหนดค่า: แปลงโครงสร้างย่อย appsettings.json เป็นคลาสเทมเพลต Options (เช่น MyOptions : IOptions<MyOptions> ใช้ร่วมกับ IConfiguration.Bind)
- เตรียมข้อมูลทดสอบ: แปลงฟิกซ์เจอร์ JSON เป็นคลาส C# จากนั้นดีซีเรียลไลซ์ด้วย Newtonsoft/System.Text.Json เป็นไดรเวอร์ทดสอบหน่วย ใช้ร่วมกับ xUnit/NUnit/MSTest
- แยกวิเคราะห์ข้อมูลครอว์เลอร์: แปลงข้อมูล JSON ที่รวบรวมโดย HtmlAgilityPack/AngleSharp/PuppeteerSharp เป็นคลาส C# หลีกเลี่ยงการขาดฟิลด์เมื่อเข้าถึงแบบไดนามิก JObject
- เขียนเอกสาร API: รวมตัวอย่างคลาส C# ไว้ในคำจำกัดความ schema ในเอกสาร Swagger/OpenAPI, ReDoc, Knife4j, Swagger UI เพื่อเพิ่มความสามารถในการอ่านของเอกสาร
- การทำงานร่วมกันในการตรวจสอบโค้ด: แปลง JSON การตอบกลับ API เป็น POCO ที่อ่านง่ายโดยตรง ทำให้สะดวกในการหารือเกี่ยวกับการตั้งชื่อฟิลด์ การเลือกประเภท การใช้อธิบายในระหว่าง Code Review
- รีแฟกเตอร์โปรเจกต์เก่า: รีแฟกเตอร์การเข้าถึงแบบไดนามิกที่อาศัย JObject/Dictionary<string, object> เป็นการเข้าถึงประเภทแข็งแรงที่อาศัย POCO เพิ่มการตรวจสอบประเภทในเวลาคอมไพล์และความสามารถในการบำรุงรักษา
- การศึกษาและการฝึกอบรม: แปลง JSON ตัวอย่างเป็น POCO ในหลักสูตร C# การฝึกอบรมเบื้องต้น .NET เพื่อสาธิตการสร้างแบบจำลองเชิงวัตถุ ตัวเข้าถึงคุณสมบัติ หลักการซีเรียลไลซ์
วิธีการใช้งาน
- วางเนื้อหา JSON ลงในตัวแก้ไขด้านซ้าย หรือคลิกปุ่มอัปโหลดเพื่อเลือกไฟล์ .json/.txt หรือคลิกปุ่มตัวอย่างเพื่อโหลดข้อมูลในตัว
- รอ 400ms สำหรับการแปลงอัตโนมัติ ด้านขวาจะแสดงโค้ดคลาส C# POCO ที่สร้างขึ้น
- หากมีข้อผิดพลาดรูปแบบ JSON สามารถคลิกปุ่ม «ซ่อม JSON» เพื่อซ่อมแซมปัญหาไวยากรณ์ทั่วไปอัตโนมัติก่อนแปลงใหม่
- คลิกปุ่ม «คัดลอก» เพื่อคัดลอกคลาสเดี่ยวไปยังคลิปบอร์ดแล้ววางใน Visual Studio/Rider/VS Code หรือคลิก «ดาวน์โหลด» เพื่อบันทึกเป็นไฟล์ .cs
คุณสมบัติ
- สร้างในเบราว์เซอร์อย่างแท้จริง: การแยกวิเคราะห์ JSON และการสร้างโค้ด C# ทั้งหมดทำในเบราว์เซอร์ผ่าน JavaScript + quicktype-core ข้อมูลที่ป้อนจะไม่ถูกอัปโหลดไปยังเซิร์ฟเวอร์ใดๆ
- สองรูปแบบ POCO + record: ค่าเริ่มต้นสร้างคลาส POCO ที่สามารถซีเรียลไลซ์ได้ สลับไปเป็นประเภท record C# 9+ ในคลิกเดียว สอดคล้องกับรูปแบบการเขียนโค้ด .NET สมัยใหม่
- อธิบาย Newtonsoft [JsonProperty]: เพิ่ม [JsonProperty("คีย์ดั้งเดิม")] อัตโนมัติสำหรับแต่ละฟิลด์ เข้ากันได้กับพฤติกรรมเริ่มต้นของ Newtonsoft.Json ชื่อฟิลด์ PascalCase จะไม่ส่งผลต่อการดีซีเรียลไลซ์
- แยกวัตถุที่ซ้อนกันอัตโนมัติ: วัตถุ JSON ที่ซ้อนกันจะถูกสร้างเป็นคลาส C# อิสระแบบเรียกซ้ำ ตั้งชื่อตามกฎตัวอักษรแรกของชื่อฟิลด์เป็นตัวพิมพ์ใหญ่ (เช่น address → Address) หลีกเลี่ยงการขัดแย้งประเภท
- ขยาย List generic อัตโนมัติ: อาร์เรย์ JSON แปลงเป็น List<T> อัตโนมัติ T ถูกสรุปอัตโนมัติจากองค์ประกอบแรกของอาร์เรย์ (["a","b"] → List<string>, [{...}] → List<Item>)
- สรุป Nullable<T> อัตโนมัติ: ฟิลด์ที่มีค่า null ใน JSON จะถูกทำเครื่องหมายเป็น Nullable<T> อัตโนมัติ (เช่น long? / string? / bool?) ป้องกันข้อยกเว้นการอ้างอิง null ในเวลาคอมไพล์
- ตั้งชื่อฟิลด์ PascalCase: ข้อมูลที่ป้อน snake_case แปลงเป็น PascalCase อัตโนมัติ (เช่น user_name → UserName) ในขณะเดียวกันอธิบาย [JsonProperty] จะเก็บคีย์ดั้งเดิมเพื่อให้แน่ใจว่าเข้ากันได้กับการดีซีเรียลไลซ์
- แมปประเภทค่าที่หลากหลาย: string→string, integer→long, float→double, bool→bool, array→List<T>, null→Nullable<T>
- เทมเพลต .cs สมบูรณ์: สร้างไฟล์ C# มาตรฐานที่มี using System.Collections.Generic; + namespace + public class + ฟิลด์ + คุณสมบัติอัตโนมัติ สามารถคอมไพล์ได้โดยตรง
- คัดลอกและดาวน์โหลด: คัดลอกคลาสเดี่ยวไปยังคลิปบอร์ดหรือดาวน์โหลดเป็นไฟล์ .cs ในคลิกเดียว ลากและวางโดยตรงลงใน Visual Studio / Rider / VS Code เพื่อใช้
- ซ่อมแซมข้อผิดพลาด JSON ในคลิกเดียว: ซ่อมแซมข้อผิดพลาดรูปแบบทั่วไปอัตโนมัติ เช่น จุลภาคที่ท้าย คำพูดเดี่ยว คำพูดที่ขาดหายไป หลังจากซ่อมแซมสำเร็จจะดำเนินการสร้างโค้ด C# ต่อ
- ประวัติในเครื่อง: บันทึกข้อมูลที่ป้อนล่าสุดอัตโนมัติตาม localStorage สามารถกู้คืนได้อย่างรวดเร็วหลังจากรีเฟรชหรือปิดหน้าโดยไม่ได้ตั้งใจเพื่อดำเนินการแก้ไขต่อ
ตัวอย่างโค้ด
C#: ดีซีเรียลไลซ์ POCO ที่เครื่องมือนี้สร้างด้วย Newtonsoft.Json
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 ที่เครื่องมือนี้สร้าง
// ภายในจะแมป JSON snake_case อัตโนมัติตามอธิบายเช่น [JsonProperty("id")]
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine($"User: {user.Name} ({user.Email})");
return user;
}
}C#: ใช้ POCO ที่เครื่องมือนี้สร้างใน ASP.NET Core Controller เพื่อรับคำขอ
csharpวาง POCO User ที่เครื่องมือนี้สร้างลงใน 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+ และต้องการความเข้ากันได้กับไวยากรณ์ Newtonsoft [JsonProperty],
* สามารถเพิ่มสิ่งต่อไปนี้ใน Program.cs:
* builder.Services.AddControllers()
* .AddNewtonsoftJson(options =>
* {
* options.SerializerSettings.ContractResolver =
* new Newtonsoft.Json.Serialization.DefaultContractResolver();
* });
*/Best Practices
แนะนำ: เปิดใช้งาน Nullable Reference Types C# 8+ เป็นค่าเริ่มต้น
เพิ่ม <Nullable>enable</Nullable> ลงใน .csproj ประเภทที่สามารถเป็น null ได้เช่น string? / List<User>? ที่เครื่องมือนี้สร้างจะได้รับการตรวจสอบ null ในเวลาคอมไพล์อัตโนมัติ ป้องกันการขัดข้องเวลาทำงาน NullReferenceException
แนะนำ: ใช้ snake_case JSON ร่วมกับชื่อฟิลด์ PascalCase
เครื่องมือนี้แปลงฟิลด์ JSON เป็น PascalCase อัตโนมัติ (เช่น user_name → UserName) ในขณะเดียวกันอธิบาย [JsonProperty] จะเก็บคีย์ดั้งเดิม รับประกันว่าโค้ดสอดคล้องกับกฎการตั้งชื่อทางการของ .NET การดีซีเรียลไลซ์ยังคงทำงานกับคีย์ JSON ดั้งเดิม
แนะนำ: แยก JSON ที่ซ้อนกันซับซ้อนเป็น POCO หลายตัวเพื่อสร้างแบบจำลอง
เมื่อระดับการซ้อนกันเกิน 4 ระดับ แนะนำให้แยกวัตถุรากเป็น POCO อิสระหลายตัว แต่ละตัวรับผิดชอบด้านธุรกิจที่แตกต่างกัน (เช่น UserDto / OrderDto / PaymentDto) หลีกเลี่ยงคลาสขนาดใหญ่หนึ่งคลาสที่มีฟิลด์ทั้งหมด เพิ่มความสามารถในการบำรุงรักษา
แนะนำ: แยก DTO และ Entity ออกจากกัน
อย่าใช้ POCO ที่เครื่องมือนี้สร้างเป็นทั้ง EF Core Entity และ API DTO แนะนำ: ①เลเยอร์ API ใช้ DTO (สร้างจาก JSON); ②เลเยอร์ EF Core ใช้ Entity (เพิ่มอธิบายข้อมูลเช่น [Key]/[Required] ด้วยตนเอง); ③ใช้ AutoMapper/Mapster เพื่อทำการแมป DTO ↔ Entity หลีกเลี่ยงการเปิดเผยโครงสร้างฐานข้อมูลโดยตรงต่อฟรอนต์เอนด์
แนะนำ: ในโปรเจกต์ System.Text.Json ให้เปลี่ยน [JsonProperty] เป็น [JsonPropertyName]
หากโปรเจกต์ใช้ System.Text.Json แนะนำให้ใช้การแทนที่ทั่วโลกใน IDE เพื่อเปลี่ยน [JsonProperty("xxx")] ที่สร้างขึ้นเป็น [JsonPropertyName("xxx")] หรือเก็บ [JsonProperty] ดั้งเดิมไว้ + ติดตั้งแพ็กเกจ Microsoft.AspNetCore.Mvc.NewtonsoftJson และเรียก AddNewtonsoftJson() เพื่อให้เข้ากันได้กับไวยากรณ์ Newtonsoft
แนะนำ: ประมวลผล JSON ที่ละเอียดอ่อนในเครื่องทั้งหมด
การคำนวณทั้งหมดของเครื่องมือนี้เสร็จสิ้นในเบราว์เซอร์ แต่ภายในองค์กรแนะนำให้เพิ่มชั้นการป้องกันเพิ่มเติม: ①อย่าคัดลอก JSON ที่มีสตริงการเชื่อมต่อฐานข้อมูลการผลิต/คีย์หลัก API ไปยังเครื่องมือออนไลน์ใดๆ; ②สำหรับการสร้าง POCO ภายใน แนะนำให้ใช้ NSwag หรือ วาง JSON เป็นคลาสของ Visual Studio เพื่อสร้างแบบออฟไลน์ทั้งหมด; ③ใช้เครื่องมือออนไลน์เฉพาะกับ JSON ตัวอย่างหลังจากปกปิดข้อมูลแล้วเท่านั้น
แนะนำ: ประมวลผล JSON ขนาดใหญ่เป็นชุดๆ
JSON ที่เกิน 1MB จะแสดงผลช้าในเบราว์เซอร์ แนะนำ: ①แยกเป็นคลาส POCO อิสระหลายคลาส (เช่น User.cs / Address.cs / Order.cs) จัดประเภทตามโมดูลธุรกิจ; ②สำหรับ JSON Schema ขนาดใหญ่มาก (มากกว่า 100 ฟิลด์) แนะนำให้ใช้ NSwag หรือฟีเจอร์ในตัวของ Visual Studio เพื่อสร้างโดยตรง; ③ใช้เครื่องมือนี้สำหรับการประมวลผลการตอบกลับ API ขนาดเล็กและกลางเท่านั้น (น้อยกว่า 100 ฟิลด์)
แนะนำ: เปลี่ยน class เป็น record เพื่อเพิ่มความไม่เปลี่ยนแปลง
สำหรับ DTO/โมเดลการตอบกลับที่ไม่จำเป็นต้องแก้ไข แนะนำให้เปลี่ยน class ที่สร้างขึ้นเป็น record C# 9+ และเปลี่ยน { get; set; } เป็น { get; init; } ประโยชน์ ได้แก่: ①รับประกันในเวลาคอมไพล์ว่าข้อมูลจะไม่ถูกแก้ไข; ②รับการเปรียบเทียบความเท่าเทียมกันของค่า (Equals/GetHashCode) อัตโนมัติ; ③ใช้ร่วมกับนิพจน์ with เพื่อลดความซับซ้อนของการคัดลอกอ็อบเจกต์
คำถามที่พบบ่อย
จะแปลง JSON เป็นคลาส C# ได้อย่างไร?
วางเนื้อหา JSON ลงในช่องป้อนข้อมูลด้านซ้าย เครื่องมือจะเรียก quicktype-core อัตโนมัติเพื่อสร้างคลาส C# ภายใน 400ms ด้านขวาจะแสดงโค้ดที่สมบูรณ์ นอกจากนี้คุณยังสามารถคลิกปุ่ม «อัปโหลด» เพื่อเลือกไฟล์ .json/.txt หรือคลิก «ตัวอย่าง» เพื่อโหลดข้อมูลในตัว หลังจากสร้างแล้วคลิกปุ่ม «คัดลอก» เพื่อคัดลอกคลาสเดี่ยวไปยังคลิปบอร์ดหรือดาวน์โหลดเป็นไฟล์ .cs
โค้ด C# ที่สร้างขึ้นจะมีอธิบาย [JsonProperty] หรือไม่?
มี เครื่องมือค่าเริ่มต้นใช้โหมดเข้ากันได้กับ Newtonsoft.Json เพิ่มแอตทริบิวต์ [JsonProperty("คีย์ดั้งเดิม")] อัตโนมัติสำหรับแต่ละฟิลด์ รับประกันว่าหลังจากชื่อฟิลด์แปลงเป็น PascalCase แล้ว การดีซีเรียลไลซ์ยังสามารถแมปคีย์ JSON ดั้งเดิมได้อย่างถูกต้อง หากใช้ System.Text.Json หลังจากสร้างสามารถเปลี่ยน [JsonProperty] เป็น [JsonPropertyName] ได้ (ทั้งสองมีความหมายเหมือนกัน) หรือใช้นโยบายการตั้งชื่อเริ่มต้นของ System.Text.Json โดยตรง ([JsonPropertyName] ใน System.Text.Json ยังสามารถประมวลผลผ่าน JsonNamingPolicy ที่กำหนดเองได้)
ควรสร้างคลาส POCO หรือประเภท record?
ค่าเริ่มต้นสร้างคลาส POCO ที่สามารถซีเรียลไลซ์ได้ (มีคุณสมบัติ { get; set; }) หากโปรเจกต์ใช้ประเภท record C# 9+ (อ็อบเจกต์ส่งข้อมูลที่ไม่เปลี่ยนแปลง เหมาะสำหรับ 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>, วัตถุที่ซ้อนกัน→คลาสอิสระ, ฟิลด์ค่า null→Nullable<T> (เช่น long? / bool? / string?) สำหรับกฎการแมปโดยละเอียด โปรดดูที่ «ตารางอ้างอิงด่วนการแมปประเภท JSON เป็นประเภท C#» ที่ด้านล่างของหน้า
ฟิลด์ null จะสร้าง Nullable<T> อัตโนมัติหรือไม่?
ใช่ เครื่องมือจะตรวจจับฟิลด์ที่เป็น null อย่างชัดเจนหรือขาดหายไปใน JSON สร้างรูปแบบ Nullable<T> อัตโนมัติ (เช่น long? Id { get; set; }) ซึ่งสอดคล้องกับคุณสมบัติ Nullable Reference Types (NRT) ที่นำเสนอใน C# 8+ ช่วยให้คอมไพเลอร์ค้นพบความเสี่ยงการอ้างอิง null ในการวิเคราะห์แบบสถิต ข้อควรระวัง: หลังจากเปิดใช้ NRT แล้ว ประเภทการอ้างอิงค่าเริ่มต้นจะไม่สามารถเป็น null ได้ จำเป็นต้องทำเครื่องหมาย string? อย่างชัดเจนเพื่อระบุว่าสามารถเป็น null ได้
อาร์เรย์จะถูกแปลงเป็น List<T> หรือไม่?
ใช่ อาร์เรย์ JSON ถูกแปลงเป็น List<T> อย่างสม่ำเสมอใน C# ประเภทองค์ประกอบถูกสรุปอัตโนมัติจากองค์ประกอบแรกของอาร์เรย์: อาร์เรย์สตริง→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 จำเป็นต้องติดตั้งแพ็กเกจ Microsoft.AspNetCore.Mvc.NewtonsoftJson หรือ Newtonsoft.Json ผ่าน NuGet) จากนั้นสามารถใช้ JsonConvert.DeserializeObject<T>(jsonString) หรือ JsonSerializer.Deserialize<T>(jsonString) เพื่อดีซีเรียลไลซ์
ข้อมูลจะถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่?
ทำงานในเบราว์เซอร์ทั้งหมด การแยกวิเคราะห์ JSON การสร้างโค้ด C# และการดาวน์โหลดไฟล์ทั้งหมดเสร็จสิ้นในเบราว์เซอร์ผ่าน JavaScript + WebAssembly ข้อมูล JSON ที่ป้อนและโค้ด C# ที่สร้างขึ้นจะไม่ถูกอัปโหลดไปยังเซิร์ฟเวอร์ใดๆ จะไม่ถูกบันทึกหรือแคชในคลาวด์ JSON ที่ละเอียดอ่อนซึ่งมีคีย์ API โทเค็น ฟิลด์ธุรกิจที่ไม่ได้เปิดเผยยังสามารถใช้ได้อย่างปลอดภัย การปิดหน้าจะถูกลบ
จำเป็นต้องลงทะเบียนหรือเข้าสู่ระบบหรือไม่?
ไม่จำเป็น เครื่องมือฟรีทั้งหมด ไม่จำเป็นต้องลงทะเบียน เข้าสู่ระบบ หรือให้สิทธิ์ เปิดหน้าก็สามารถใช้ได้ทันที ฟังก์ชันทั้งหมดมีให้ใช้ในเบราว์เซอร์
จะทำอย่างไรหากมีข้อผิดพลาดรูปแบบ JSON?
เครื่องมือจะตรวจสอบความถูกต้องของ JSON อัตโนมัติ เมื่อมีข้อผิดพลาดจะแสดงข้อความผิดพลาดสีแดงที่ด้านขวาและมีปุ่ม «ซ่อม JSON» คลิกเพื่อซ่อมแซมข้อผิดพลาดทั่วไปอัตโนมัติ: จุลภาคที่ท้าย เปลี่ยนคำพูดเดี่ยวเป็นคำพูดคู่ เติมคำพูดสำหรับคีย์ที่ไม่มีคำพูด ลบคำอธิบาย ฯลฯ หลังจากซ่อมแซมสำเร็จจะดำเนินการสร้างโค้ด C# ต่อ
Newtonsoft.Json กับ System.Text.Json ไหนดีกว่ากัน?
ทั้งสองเป็นไลบรารี JSON หลักที่สุดในระบบนิเวศ .NET 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# สร้างคลาส POCO พร้อมอธิบาย [JsonProperty] สามารถใช้โดยตรงกับ Newtonsoft.Json หรือ System.Text.Json สำหรับดีซีเรียลไลซ์; JSON เป็น Java สร้าง POJO พร้อมอธิบาย Lombok/Gson/Jackson; JSON เป็น Rust สร้าง struct พร้อม Serde derive ทั้งสามมุ่งเน้นไปที่ระบบนิเวศที่แตกต่างกัน การเลือกขึ้นอยู่กับสแตกเทคโนโลยี
จะทำอย่างไรหากการดีซีเรียลไลซ์คลาสที่มีฟิลด์ DateTime ล้มเหลว?
System.Text.Json ค่าเริ่มต้นไม่รองรับการแปลงอัตโนมัติระหว่าง string กับ DateTime จะส่ง JsonException มีสองวิธีแก้ไข: ①เพิ่มตัวแปลงที่กำหนดเอง [JsonConverter(typeof(DateTimeConverter))] ลงในฟิลด์; ②ตั้งค่า JsonSerializerOptions ทั่วโลกใน Program.cs: options.PropertyNameCaseInsensitive = true; และใช้ JsonConverter ที่กำหนดเองเพื่อประมวลผล DateTime Newtonsoft.Json รองรับการดีซีเรียลไลซ์ DateTime เป็นค่าเริ่มต้น แต่สำหรับรูปแบบพิเศษ (เช่น Unix timestamp) จำเป็นต้องมี 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,}), ใช้คำพูดเดี่ยวแทนคำพูดคู่ คีย์ไม่ได้อยู่ในคำพูดคู่ มีคำอธิบาย JavaScript การคลิกปุ่ม «ซ่อม JSON» สามารถซ่อมแซมข้อผิดพลาดบางอย่างอัตโนมัติ; หากยังล้มเหลวโปรดตรวจสอบด้วยเครื่องมือจัดรูปแบบ JSON ก่อน
ประเภทฟิลด์ที่สร้างขึ้นไม่ถูกต้องเพียงพอ
เครื่องมือสรุปประเภทตามตัวอย่าง JSON เช่น จำนวนเต็มทั้งหมดเป็น long สตริงทั้งหมดเป็น string หากต้องการประเภทที่ถูกต้องมากขึ้น (int/decimal/Guid/DateTime) โปรดเปลี่ยนประเภทฟิลด์ด้วยตนเองหลังจากสร้าง System.Text.Json ค่าเริ่มต้นไม่รองรับ DateTime จำเป็นต้องกำหนดเองผ่าน [JsonConverter]
ฟิลด์ null สร้าง Nullable<T> แต่โปรเจกต์ไม่ได้เปิดใช้งาน Nullable Reference Types
เครื่องมือค่าเริ่มต้นสร้างในรูปแบบ Nullable Reference Types C# 8+ (เช่น string? / List<User>?) หากโปรเจกต์เป็นเวอร์ชัน .NET Framework เก่า/ไม่ได้เปิดใช้ NRT ประเภทการอ้างอิงค่าเริ่มต้นสามารถเป็น null ได้ สามารถลบ ? ของ string? โดยตรง (หรือเปิดใช้ <Nullable>enable</Nullable> ใน .csproj)
เมื่อคอมไพล์แจ้งว่าไม่พบการอ้างอิง Newtonsoft.Json
โปรดเพิ่ม PackageReference ต่อไปนี้ลงใน .csproj: <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] จะเก็บคีย์ดั้งเดิม Newtonsoft.Json จะแมปตาม [JsonProperty] เมื่อดีซีเรียลไลซ์ ไม่จำเป็นต้องประมวลผลด้วยตนเอง หากใช้นโยบายการตั้งชื่อเริ่มต้น System.Text.Json จำเป็นต้องเปลี่ยน [JsonProperty] เป็น [JsonPropertyName] หรือตั้งค่านโยบายการตั้งชื่อ CamelCase ใน Program.cs
ไฟล์ .cs ที่ดาวน์โหลดแจ้งข้อผิดพลาดการคอมไพล์ในโปรเจกต์
สาเหตุที่เป็นไปได้: ①ไม่ได้เพิ่มการอ้างอิง Newtonsoft.Json/System.Text.Json ใน .csproj; ②คลาสถูกวางในไดเรกทอรีที่ไม่เหมาะสม (จำเป็นต้องวางในไดเรกทอรีรากหรือไดเรกทอรีย่อยของโปรเจกต์ .NET และสอดคล้องกับ namespace); ③ชื่อคลาสขัดแย้งกับประเภทอื่นในโปรเจกต์ วิธีแก้ไข: เพิ่มการอ้างอิง ปรับไดเรกทอรีและ namespace เปลี่ยนชื่อคลาสที่ขัดแย้ง
เมื่อรับ JSON ใน ASP.NET Core เกิดข้อผิดพลาด «Cannot deserialize»
ASP.NET Core 3.0+ ใช้ System.Text.Json เป็นค่าเริ่มต้น แต่ [JsonProperty] ที่เครื่องมือสร้างเป็นไวยากรณ์ Newtonsoft.Json สองวิธีแก้ไข: ①เพิ่มแพ็กเกจ Microsoft.AspNetCore.Mvc.NewtonsoftJson ลงใน .csproj และเรียก AddNewtonsoftJson() ใน Program.cs; ②เปลี่ยน [JsonProperty("xxx")] ที่สร้างขึ้นทั้งหมดเป็น [JsonPropertyName("xxx")] (ไวยากรณ์ System.Text.Json)
อาร์เรย์เป็นประเภทตัวเลขแต่สร้าง List<object>
โดยทั่วไปเมื่ออาร์เรย์ว่าง [] ค่าเริ่มต้นจะถูกสรุปเป็น List<object> โปรดเพิ่มองค์ประกอบตัวอย่างอย่างน้อยหนึ่งองค์ประกอบ (เช่น [1,2,3]) ลงใน JSON ดั้งเดิม เครื่องมือจะสรุปประเภทตามองค์ประกอบแรก; หรือหลังจากสร้างเปลี่ยน List<object> เป็น List<long>/List<int> ด้วยตนเอง
เมื่อแปลง JSON ขนาดใหญ่มากหน้าเว็บค้าง
แนะนำให้แบ่ง JSON ออกเป็นโมดูลอิสระหลายโมดูลเพื่อแปลงแยกกัน หรือแยกเฉพาะส่วนที่จำเป็นต้องสร้างแบบจำลอง เบราว์เซอร์จะใช้หน่วยความจำมากเมื่อแสดงคลาสที่ซ้อนกันจำนวนมาก สำหรับ JSON ที่เกิน 5 MB แนะนำให้ใช้ NSwag หรือฟีเจอร์ในตัวของ Visual Studio «วาง JSON เป็นคลาส»
อภิธานศัพท์
- POCO (Plain Old CLR Object)
- ตัวย่อของ «อ็อบเจกต์ CLR ธรรมดา» ใน C#/.NET ข้อจำกัดคือ: คอนสตรักเตอร์เริ่มต้นสาธารณะ + ฟิลด์ private + คุณสมบัติสาธารณะ { get; set; } + ไม่มีการอ้างอิงเฟรมเวิร์ก สิ่งที่เครื่องมือนี้สร้างคือ POCO มาตรฐาน
- record
- ประเภทอ็อบเจกต์ส่งข้อมูลที่ไม่เปลี่ยนแปลงที่นำเสนอใน C# 9+ ใช้ความเท่าเทียมกันของค่าแทนความเท่าเทียมกันของการอ้างอิง หลังจากสร้างในเครื่องมือนี้สามารถเปลี่ยนเป็น record ด้วยตนเอง เหมาะสำหรับสถานการณ์เช่น DTO โมเดลการตอบกลับ API การกำหนดค่าที่ไม่เปลี่ยนแปลง
- [JsonProperty]
- แอตทริบิวต์การแมปฟิลด์ของ Newtonsoft.Json เครื่องมือนี้เพิ่ม [JsonProperty("คีย์ดั้งเดิม")] สำหรับแต่ละฟิลด์เป็นค่าเริ่มต้น รับประกันว่าชื่อฟิลด์ PascalCase สามารถดีซีเรียลไลซ์ JSON snake_case ได้อย่างถูกต้อง
- Newtonsoft.Json
- หรือที่เรียกว่า Json.NET เป็นไลบรารี JSON ที่ได้รับความนิยมมากที่สุดในระบบนิเวศ .NET มีระบบนิเวศที่อุดมสมบูรณ์ที่สุดและความเข้ากันได้ดีที่สุด รองรับโดยโปรเจกต์ .NET เกือบทั้งหมด ถูกใช้เป็นค่าเริ่มต้นก่อน ASP.NET Core 3.0 หลังจาก 3.0 ถูกแทนที่ด้วย System.Text.Json แต่ยังสามารถทำให้เข้ากันได้ผ่านแพ็กเกจ NuGet
- System.Text.Json
- ไลบรารีประสิทธิภาพสูงที่มีอยู่ในตัวใน .NET Core 3.0+ เริ่มต้นเร็ว ใช้หน่วยความจำต่ำ เป็นมิตรกับ AOT มี [JsonPropertyName] (สอดคล้องกับ [JsonProperty] ของ Newtonsoft) และนโยบายการตั้งชื่อแบบกำหนดเอง JsonNamingPolicy
- Nullable<T>
- ประเภทใน C# ที่ระบุว่าประเภทค่าสามารถเป็น null ได้ (เช่น long? / bool?) เครื่องมือนี้สรุปฟิลด์ null ใน JSON เป็น Nullable<T> อัตโนมัติเพื่อป้องกันข้อยกเว้นการอ้างอิง null ในเวลาคอมไพล์
- List<T>
- ประเภทรายการเจเนอริกในเฟรมเวิร์กคอลเลกชัน .NET เครื่องมือนี้แปลงอาร์เรย์ JSON เป็น List<T> อัตโนมัติ T ถูกสรุปอัตโนมัติจากองค์ประกอบแรกของอาร์เรย์ (เช่น ["a"] → List<string>)
- namespace
- คีย์เวิร์ดเนมสเปซใน C# สำหรับจัดระเบียบคลาส คล้ายกับ package ใน Java โค้ดที่สร้างโดยเครื่องมือนี้ค่าเริ่มต้นไม่มี namespace สามารถเพิ่มด้วยตนเองได้ (เช่น namespace MyApp.Models)
- ASP.NET Core
- เฟรมเวิร์กเว็บโอเพนซอร์สข้ามแพลตฟอร์มของ Microsoft คลาส POCO ที่สร้างโดยเครื่องมือนี้สามารถใช้โดยตรงในสถานการณ์เช่น การผูกโมเดล [FromBody] ของ ASP.NET Core Controller, Minimal API, พารามิเตอร์คอมโพเนนต์ Blazor
- Unity
- เอนจินเกมที่ได้รับความนิยมมากที่สุดในโลก ภาษาสคริปต์คือ C# คลาส POCO ที่สร้างโดยเครื่องมือนี้สามารถใช้สำหรับการแยกวิเคราะห์การตอบกลับ API เครือข่าย Unity การสร้างแบบจำลองข้อมูลการกำหนดค่า 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 ข้ามแพลตฟอร์มของ Microsoft (.NET Multi-platform App UI) โค้ด C# สามารถแชร์ได้บน iOS/Android/Windows/macOS POCO ที่สร้างโดยเครื่องมือนี้เหมาะสมเป็น Model สำหรับการผูกข้อมูล XAML ใน MAUI
- Blazor
- เฟรมเวิร์ก SPA ของ Microsoft ตาม WebAssembly มีสองโหมด: Server และ WebAssembly คลาส C# ที่สร้างโดยเครื่องมือนี้สามารถใช้สำหรับพารามิเตอร์คอมโพเนนต์ Blazor โมเดลการตอบกลับ API ประเภทแข็งแรง เพิ่มประสิทธิภาพการพัฒนาฟูลสแต็กด้วยภาษาเดียว
- HttpClient.GetFromJsonAsync
- เมธอดขยาย .NET 5+/System.Net.Http.Json ทำ HTTP GET + ดีซีเรียลไลซ์ JSON ให้เสร็จในหนึ่งบรรทัด เมื่อใช้ร่วมกับ POCO ที่สร้างโดยเครื่องมือนี้สามารถลดความซับซ้อนของโค้ดไคลเอ็นต์ API HTTP ได้อย่างมาก
- JsonNamingPolicy
- คลาสใน System.Text.Json ที่ควบคุมกฎการแมประหว่างชื่อฟิลด์ JSON และชื่อคุณสมบัติ C# (เช่น CamelCase, SnakeCaseLower) Newtonsoft.Json ถูกนำไปใช้ผ่านอธิบาย [JsonProperty] หรือ ContractResolver
- IOptions<T>
- อินเทอร์เฟซหลักของรูปแบบ Options ใน .NET เชื่อมโยงโครงสร้างย่อย appsettings.json กับคลาสประเภทแข็งแรง POCO ที่สร้างโดยเครื่องมือนี้เมื่อใช้ร่วมกับ IConfiguration.Bind สามารถใช้เป็นการใช้งาน IOptions<T> โดยตรง
ตารางอ้างอิงด่วนการแมปประเภท JSON เป็นประเภท C#
เครื่องมือสรุปประเภท .NET/C# ที่สอดคล้องกันอัตโนมัติตามประเภทค่า JSON:
| ตัวอย่างค่า JSON | ประเภท C# ที่สร้างขึ้น | รูปแบบ Nullable | คำอธิบาย |
|---|---|---|---|
null | สรุปตามบริบท | T? | ฟิลด์ค่า null ถูกสรุปเป็น Nullable<T> อัตโนมัติ (เช่น long? / bool? / string?) |
true / false | bool | bool? | ค่าบูลีน JSON แมปโดยตรงกับ bool C# |
42 | long | long? | จำนวนเต็ม JSON แมปกับ long เป็นค่าเริ่มต้น (จำนวนเต็ม 64 บิต เข้ากันได้กับจำนวนมาก) |
3.14 | double | double? | จำนวนทศนิยม JSON แมปกับ double เป็นค่าเริ่มต้น (จำนวนทศนิยมความแม่นยำสองเท่า) |
"hello" | string | string? | สตริง JSON แมปกับ string C# |
["a","b"] | List<string> | List<string>? | อาร์เรย์สตริงแมปกับ List<string> |
[1,2,3] | List<long> | List<long>? | อาร์เรย์จำนวนเต็มแมปกับ List<long> |
[{...},{...}] | List<Item> | List<Item>? | อาร์เรย์อ็อบเจกต์จะสร้างคลาสที่สอดคล้องกันสำหรับองค์ประกอบแรกก่อนจากนั้นห่อด้วย List |
[] | List<object> | List<object>? | อาร์เรย์ว่างไม่สามารถสรุปประเภทองค์ประกอบได้ ค่าเริ่มต้นจะลดระดับเป็น object แนะนำให้เปลี่ยนเป็นประเภทที่เฉพาะเจาะจงด้วยตนเองหลังจากสร้าง |
{...} วัตถุที่ซ้อนกัน | คลาสอิสระ | ClassName? | วัตถุที่ซ้อนกันสร้างคลาสอิสระ ตั้งชื่อตามกฎตัวอักษรแรกของชื่อฟิลด์เป็นตัวพิมพ์ใหญ่ (address → Address) |
ตารางเปรียบเทียบอธิบาย Newtonsoft.Json และ System.Text.Json
การเปรียบเทียบแอตทริบิวต์การแมปฟิลด์ของไลบรารี JSON หลักสองแห่งในระบบนิเวศ .NET เครื่องมือนี้สร้าง [JsonProperty] ที่เข้ากันได้กับ Newtonsoft เป็นค่าเริ่มต้น:
| รายการเปรียบเทียบ | Newtonsoft.Json | System.Text.Json |
|---|---|---|
แอตทริบิวต์การแมปฟิลด์ | [JsonProperty("user_name")] | [JsonPropertyName("user_name")] |
นโยบายการตั้งชื่อเริ่มต้น | รักษาชื่อฟิลด์ PascalCase (snake_case ต้องใช้ [JsonProperty]) | รักษาชื่อฟิลด์ดั้งเดิม (จับคู่ตามคีย์ JSON ค่าเริ่มต้น CamelCase) |
การตั้งชื่อแบบกำหนดเอง | ระบุทีละฟิลด์ด้วย [JsonProperty] | [JsonPropertyName] + การตั้งค่าทั่วโลก JsonNamingPolicy |
การประมวลผลค่า null | NullValueHandling.Ignore / Include | JsonIgnoreCondition.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 ไฟล์ที่อัปโหลดหรือโค้ดที่สร้างขึ้นจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ใดๆ ผ่านเครือข่าย การอัปโหลดไฟล์ใช้ API FileReader ดั้งเดิมของเบราว์เซอร์เพื่ออ่านลงในหน่วยความจำโดยตรง ไม่ผ่านบริการตัวกลางใดๆ ไม่ใช้การติดตามคุกกี้ ไม่รวบรวมข้อมูลที่ผู้ใช้ป้อนหรือข้อมูลพฤติกรรมการใช้งาน หลังจากปิดหรือรีเฟรชหน้า เนื้อหาอินพุตและเอาต์พุตทั้งหมดจะถูกลบออกจากหน่วยความจำอัตโนมัติ เหมาะสำหรับการประมวลผล JSON ที่มีคีย์ API โทเค็น ข้อมูลธุรกิจที่ละเอียดอ่อน
Authoritative References
- บีบอัด JSON
- แปลง CSV เป็น JSON
- JSON เป็น CSV
- JSON Diff
- JSON Escape / Unescape
- แฟลตเทน JSON
- จัดรูปแบบ JSON
- เครื่องมือสร้าง JSON
- คิวรี JSONPath
- รวม JSON
- ซ่อมแซม JSON
- ตัวตรวจสอบ JSON Schema
- เรียง JSON
- JSON Stringify
- JSON เป็น HTML
- JSON เป็น Java
- JSON เป็น Markdown
- แปลง JSON เป็น SQL
- JSON เป็น TOML
- JSON เป็น TypeScript
- แปลง XML เป็น JSON
- แปลง JSON เป็น XML
- YAML เป็น JSON
- JSON → YAML
- JSON เป็น Go
- JSON เป็น Rust
- JSON to Swift
- JSON เป็น C#
- JSON เป็น C++
- JSON เป็น PHP
- JSON เป็น Python