logo
GeekFormat

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 เพื่อสาธิตการสร้างแบบจำลองเชิงวัตถุ ตัวเข้าถึงคุณสมบัติ หลักการซีเรียลไลซ์

วิธีการใช้งาน

  1. วางเนื้อหา JSON ลงในตัวแก้ไขด้านซ้าย หรือคลิกปุ่มอัปโหลดเพื่อเลือกไฟล์ .json/.txt หรือคลิกปุ่มตัวอย่างเพื่อโหลดข้อมูลในตัว
  2. รอ 400ms สำหรับการแปลงอัตโนมัติ ด้านขวาจะแสดงโค้ดคลาส C# POCO ที่สร้างขึ้น
  3. หากมีข้อผิดพลาดรูปแบบ JSON สามารถคลิกปุ่ม «ซ่อม JSON» เพื่อซ่อมแซมปัญหาไวยากรณ์ทั่วไปอัตโนมัติก่อนแปลงใหม่
  4. คลิกปุ่ม «คัดลอก» เพื่อคัดลอกคลาสเดี่ยวไปยังคลิปบอร์ดแล้ววางใน 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>enable</Nullable> ลงใน .csproj ประเภทที่สามารถเป็น null ได้เช่น string? / List<User>? ที่เครื่องมือนี้สร้างจะได้รับการตรวจสอบ null ในเวลาคอมไพล์อัตโนมัติ ป้องกันการขัดข้องเวลาทำงาน NullReferenceException

เครื่องมือนี้แปลงฟิลด์ JSON เป็น PascalCase อัตโนมัติ (เช่น user_name → UserName) ในขณะเดียวกันอธิบาย [JsonProperty] จะเก็บคีย์ดั้งเดิม รับประกันว่าโค้ดสอดคล้องกับกฎการตั้งชื่อทางการของ .NET การดีซีเรียลไลซ์ยังคงทำงานกับคีย์ JSON ดั้งเดิม

เมื่อระดับการซ้อนกันเกิน 4 ระดับ แนะนำให้แยกวัตถุรากเป็น POCO อิสระหลายตัว แต่ละตัวรับผิดชอบด้านธุรกิจที่แตกต่างกัน (เช่น UserDto / OrderDto / PaymentDto) หลีกเลี่ยงคลาสขนาดใหญ่หนึ่งคลาสที่มีฟิลด์ทั้งหมด เพิ่มความสามารถในการบำรุงรักษา

อย่าใช้ POCO ที่เครื่องมือนี้สร้างเป็นทั้ง EF Core Entity และ API DTO แนะนำ: ①เลเยอร์ API ใช้ DTO (สร้างจาก JSON); ②เลเยอร์ EF Core ใช้ Entity (เพิ่มอธิบายข้อมูลเช่น [Key]/[Required] ด้วยตนเอง); ③ใช้ AutoMapper/Mapster เพื่อทำการแมป DTO ↔ Entity หลีกเลี่ยงการเปิดเผยโครงสร้างฐานข้อมูลโดยตรงต่อฟรอนต์เอนด์

หากโปรเจกต์ใช้ System.Text.Json แนะนำให้ใช้การแทนที่ทั่วโลกใน IDE เพื่อเปลี่ยน [JsonProperty("xxx")] ที่สร้างขึ้นเป็น [JsonPropertyName("xxx")] หรือเก็บ [JsonProperty] ดั้งเดิมไว้ + ติดตั้งแพ็กเกจ Microsoft.AspNetCore.Mvc.NewtonsoftJson และเรียก AddNewtonsoftJson() เพื่อให้เข้ากันได้กับไวยากรณ์ Newtonsoft

การคำนวณทั้งหมดของเครื่องมือนี้เสร็จสิ้นในเบราว์เซอร์ แต่ภายในองค์กรแนะนำให้เพิ่มชั้นการป้องกันเพิ่มเติม: ①อย่าคัดลอก JSON ที่มีสตริงการเชื่อมต่อฐานข้อมูลการผลิต/คีย์หลัก API ไปยังเครื่องมือออนไลน์ใดๆ; ②สำหรับการสร้าง POCO ภายใน แนะนำให้ใช้ NSwag หรือ วาง JSON เป็นคลาสของ Visual Studio เพื่อสร้างแบบออฟไลน์ทั้งหมด; ③ใช้เครื่องมือออนไลน์เฉพาะกับ JSON ตัวอย่างหลังจากปกปิดข้อมูลแล้วเท่านั้น

JSON ที่เกิน 1MB จะแสดงผลช้าในเบราว์เซอร์ แนะนำ: ①แยกเป็นคลาส POCO อิสระหลายคลาส (เช่น User.cs / Address.cs / Order.cs) จัดประเภทตามโมดูลธุรกิจ; ②สำหรับ JSON Schema ขนาดใหญ่มาก (มากกว่า 100 ฟิลด์) แนะนำให้ใช้ NSwag หรือฟีเจอร์ในตัวของ Visual Studio เพื่อสร้างโดยตรง; ③ใช้เครื่องมือนี้สำหรับการประมวลผลการตอบกลับ API ขนาดเล็กและกลางเท่านั้น (น้อยกว่า 100 ฟิลด์)

สำหรับ 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 / falseboolbool?ค่าบูลีน JSON แมปโดยตรงกับ bool C#
42longlong?จำนวนเต็ม JSON แมปกับ long เป็นค่าเริ่มต้น (จำนวนเต็ม 64 บิต เข้ากันได้กับจำนวนมาก)
3.14doubledouble?จำนวนทศนิยม JSON แมปกับ double เป็นค่าเริ่มต้น (จำนวนทศนิยมความแม่นยำสองเท่า)
"hello"stringstring?สตริง 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.JsonSystem.Text.Json
แอตทริบิวต์การแมปฟิลด์[JsonProperty("user_name")][JsonPropertyName("user_name")]
นโยบายการตั้งชื่อเริ่มต้นรักษาชื่อฟิลด์ PascalCase (snake_case ต้องใช้ [JsonProperty])รักษาชื่อฟิลด์ดั้งเดิม (จับคู่ตามคีย์ JSON ค่าเริ่มต้น CamelCase)
การตั้งชื่อแบบกำหนดเองระบุทีละฟิลด์ด้วย [JsonProperty][JsonPropertyName] + การตั้งค่าทั่วโลก JsonNamingPolicy
การประมวลผลค่า nullNullValueHandling.Ignore / IncludeJsonIgnoreCondition.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