JSON ถึงคลาสใน C#

ให้วางตัวอย่าง JSON แล้วระบบจะสร้างคลาส POCO สำหรับภาษา C# ขึ้นมาโดยอัตโนมัติ เพื่อนำไปใส่ในไฟล์ .cs โดยระบบจะเลือกประเภทข้อมูลที่เหมาะสม จัดการวัตถุแบบซ้อนกันที่มีคำนิยามของคลาสเพิ่มเติม รองรับประเภทอ้างอิงที่สามารถเป็น null ได้ และสร้างแอตทริบิวต์ System.Text.Json หรือ Newtonsoft.Json ตามความต้องการของโปรเจกต์

วิธีแปลง JSON เป็นภาษา C#

  1. 1

    วางข้อมูลในรูปแบบ JSON

    ตัวอย่างเพียงหนึ่งชุดก็เพียงพอแล้ว การใช้ตัวอย่างหลายชุดจะช่วยปรับปรุงประสิทธิภาพในการอนุมานค่าที่อาจเป็นศูนย์ (nullable) และค่าในอาร์เรย์ได้ดียิ่งขึ้น

  2. 2

    เลือกสไตล์

    ใช้ System.Text.Json (.NET 6+) หรือ Newtonsoft.Json (รูปแบบเก่า) โดยชื่อพร็อพเพอร์ตี้แบบ PascalCase จะมี `[JsonPropertyName]` กำกับสำหรับ JSON แบบ camelCase

  3. 3

    เลือกเวอร์ชันของ C# เป้าหมาย

    ใช้ C# 10+ สำหรับ namespace ที่ใช้งานในระดับรีคอร์ดและไฟล์; ใช้ C# 8 สำหรับประเภทข้อมูลที่สามารถเป็น null ได้; และใช้เวอร์ชันก่อนหน้าเพื่อความเข้ากันได้สูงสุด

  4. 4

    คัดลอกคลาสต่างๆ

    มีคลาสรากหนึ่งคลาส พร้อมคลาสย่อยสำหรับแต่ละรูปทรงของออบเจกต์ ทั้งหมดอยู่ในไฟล์เดียวกัน ใช้งานได้ทันทีเมื่อนำไปใส่ในโปรเจกต์ของคุณ

ตัวอย่างผลลัพธ์

สำหรับการป้อนข้อมูล:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

ผลลัพธ์ของ 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!;
}

การจับคู่รูปแบบ

รูปแบบข้อมูล ประเภทภาษา C#
ข้อความ string
จำนวนเต็ม int (หรือ long สำหรับค่าที่มากกว่า int.MaxValue)
ตัวเลข (ทศนิยม) double (หรือ decimal หากเลือกใช้)
บูลีน bool
null object? (หรือรวมเข้ากับข้อมูลที่เกี่ยวข้อง)
วันที่ตามมาตรฐาน ISO-8601 DateTime (หรือ DateOnly)
ข้อความรูปแบบรหัสประจำตัว (GUID) Guid
ชุดสตริง List<string>
วัตถุ คลาสแบบซ้อนทับ

ตัวเลือกของแอตทริบิวต์

  • System.Text.Json ([JsonPropertyName("foo")]), เหมาะอย่างยิ่งสำหรับโครงการที่ใช้ .NET 6+ และโครงการใหม่
  • Newtonsoft.Json ([JsonProperty("foo")]), ใช้สำหรับโปรเจกต์เก่า หรือเมื่อคุณต้องการฟีเจอร์เฉพาะของ Newtonsoft
  • ไม่มี, ชื่อพร็อพเพอร์ตี้ตรงกับคีย์ใน JSON อย่างแม่นยำ (ใช้ได้เฉพาะเมื่อคีย์ใน JSON เป็น PascalCase อยู่แล้ว)

ข้อผิดพลาดที่พบบ่อย

  • ใช้ int สำหรับฟิลด์ที่อาจมีค่าเกินขีดจำกัด หาก JSON ของคุณมีค่าที่มากกว่า int.MaxValue ให้ใช้ long โดยตัวสร้างจะเปลี่ยนไปใช้ long อัตโนมัติเมื่อตรวจพบค่าที่มีขนาดใหญ่
  • ไม่มี [JsonIgnore] สำหรับคุณสมบัติที่คำนวณได้ หากคุณเพิ่มคุณสมบัติช่วย (helper props) เข้าไปในคลาสที่สร้างขึ้น ให้กำหนดค่า [JsonIgnore] ให้กับคุณสมบัติดังกล่าว มิฉะนั้นคุณสมบัติเหล่านี้จะถูกแปลงเป็นข้อมูลแบบเซรีแอลไลซ์ (serialized data) ในระหว่างกระบวนการประมวลผล
  • การละเลยการวิเคราะห์ข้อมูลที่ไม่ขึ้นอยู่กับวัฒนธรรม ฟิลด์ของ decimal ควรถูกแปลงรูปแบบให้สอดคล้องกับ CultureInfo.InvariantCulture โดยค่าเริ่มต้นแล้ว System.Text.Json จะทำเช่นนี้ ส่วน Newtonsoft ก็ทำเช่นเดียวกันเมื่อใช้การตั้งค่าระดับโลก
  • ให้ความไว้วางใจกับตัวสร้างข้อมูลโดยใช้เพียงตัวอย่างเดียว คุณสมบัติของข้อมูลที่สามารถถูกตัดทอนได้ (nullable) และประเภทของรายการในอาร์เรย์จะถูกคาดการณ์จากสิ่งที่ระบบตรวจพบเสมอ ควรตรวจสอบความถูกต้องของคำอธิบายเกี่ยวกับคุณสมบัติnullable เทียบกับพฤติกรรมจริงของ API ของคุณอยู่เสมอ

คำถามที่พบบ่อย

สำหรับโปรเจกต์ใหม่ที่ใช้ .NET 6+ ควรใช้ System.Text.Json เนื่องจากมีความเร็วสูงกว่า เป็นฟังก์ชันที่รวมอยู่ในระบบโดยตรง และรองรับคุณสมบัติเกือบทั้งหมดของ Newtonsoft นอกจากนี้สามารถใช้ Newtonsoft สำหรับโปรเจกต์เก่า หรือเมื่อจำเป็นต้องใช้คุณสมบัติเฉพาะ เช่น ตัวแก้ไขสัญญาแบบกำหนดเอง (custom contract resolvers), JObject และการจัดการแบบไดนามิก

ใน C# 10+ เรคคอร์ด (record) เป็นรูปแบบที่นิยมใช้สำหรับ DTO ที่เปลี่ยนแปลงค่าไม่ได้ เพราะให้ความเท่าเทียมของค่าและไวยากรณ์ที่กระชับ ส่วนคลาสจะเหมาะกว่าเมื่อจำเป็นต้องมีการปรับเปลี่ยนข้อมูลหรือรองรับระบบเก่า เครื่องมือนี้ให้คุณเลือกใช้อย่างใดอย่างหนึ่งได้

หากโปรเจกต์ของคุณใช้ประเภทข้อมูลที่สามารถเป็น null ได้ (C# 8+) ฟิลด์ที่ตรวจพบว่ามีค่าเป็น null ในตัวอย่างใดๆ จะถูกกำหนดรหัสเป็น string?, int? เป็นต้น หากไม่ใช้ NRT การระบุว่าข้อมูลอาจเป็น null จะเกิดขึ้นเฉพาะกับประเภทข้อมูลที่มีค่าเท่านั้น (เช่น int?)

อาร์เรย์ที่ประกอบด้วยวัตถุหลายรูปทรงไม่สามารถแสดงได้โดยตรงในภาษา C# ที่มีการกำหนดประเภทข้อมูลอย่างชัดเจน เครื่องมือจะอิงหาคลาสพื้นฐานร่วม หรือคลาสสำรอง object โดยทั่วไปแล้ว คุณควรออกแบบโครงสร้างข้อมูล JSON ใหม่สำหรับอาร์เรย์ประเภทนี้

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น