0Pricing
C# Academy · บทเรียน

JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)

JSON ที่เหมาะกับ C# 6: ใช้ DataContractJsonSerializer ร่วมกับ [DataContract]/[DataMember] (สมาชิกที่ต้องเลือกใช้เอง) และปรับชื่ออย่างง่ายในลักษณะคล้ายตัวแปลง

JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง) เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

แผนการใช้ JSON ใน C# 6

เป้าหมาย: ทำซีเรียลไลซ์และดีซีเรียลไลซ์ JSON โดยไม่ใช้แพ็กเกจภายนอก

  • ใช้ DataContractJsonSerializer
  • เลือกสมาชิกเข้าร่วมผ่าน DataMember
  • กำหนดชื่อเองด้วย Name=
  • อ่านและเขียนไฟล์อย่างปลอดภัย

โมเดลแบบเลือกสมาชิก

โมเดลแบบเลือกสมาชิก: กำกับชนิดข้อมูลด้วย DataContract และกำกับเฉพาะสมาชิกที่รวมไว้ด้วย DataMember ใช้ Name= เพื่อควบคุมคีย์ JSON

using System;
using System.Runtime.Serialization;

[DataContract] // opt-in: only [DataMember] will be serialized
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  // Not included: no DataMember
  public string InternalNote { get; set; }
}

public class Program
{
  public static void Main(string[] args)
  {
    User u = new User { Id = 7, Name = "Ada", InternalNote = "hidden" };
    Console.WriteLine("Ready to serialize: " + u.Name);
  }
}

ทำซีเรียลไลซ์เป็น JSON

สร้าง DataContractJsonSerializer เขียนลงในสตรีม แล้วเข้ารหัสแบบ UTF-8 เป็นสตริง

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }

  public string InternalNote { get; set; }
}

public class Program
{
  public static string ToJson(User u)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    using (MemoryStream ms = new MemoryStream())
    {
      ser.WriteObject(ms, u);
      return Encoding.UTF8.GetString(ms.ToArray());
    }
  }

  public static void Main(string[] args)
  {
    User u = new User { Id = 1, Name = "Ada", InternalNote = "not saved" };
    string json = ToJson(u);
    Console.WriteLine(json); // {"id":1,"name":"Ada"}
  }
}

ทำดีซีเรียลไลซ์จาก JSON

ทำดีซีเรียลไลซ์โดยอ่านจากสตรีม ระบบจะกำหนดค่าให้เฉพาะฟิลด์ที่มี DataMember เท่านั้น

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

[DataContract]
public sealed class User
{
  [DataMember(Name = "id")]
  public int Id { get; set; }

  [DataMember(Name = "name")]
  public string Name { get; set; }
}

public class Program
{
  public static User FromJson(string json)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
    byte[] bytes = Encoding.UTF8.GetBytes(json);
    using (MemoryStream ms = new MemoryStream(bytes))
    {
      return (User)ser.ReadObject(ms);
    }
  }

  public static void Main(string[] args)
  {
    string json = "{\"id\":42,\"name\":\"Bob\"}";
    User u = FromJson(json);
    Console.WriteLine(u.Id + " - " + u.Name);
  }
}

บันทึกและโหลดไฟล์ JSON

เก็บ JSON ไว้ถาวรด้วย FileStream ภายในบล็อก using รูปแบบนี้สอดคล้องกับแอปจริง เช่น การตั้งค่าและข้อมูลขนาดเล็ก เป็นต้น

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

[DataContract]
public sealed class Settings
{
  [DataMember(Name = "theme")]
  public string Theme { get; set; }

  [DataMember(Name = "notifications")]
  public bool Notifications { get; set; }
}

public class Program
{
  public static void Save(string path, Settings s)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
    {
      ser.WriteObject(fs, s);
    }
  }

  public static Settings Load(string path)
  {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Settings));
    using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
    {
      return (Settings)ser.ReadObject(fs);
    }
  }

  public static void Main(string[] args)
  {
    string path = "settings.json";
    Save(path, new Settings { Theme = "dark", Notifications = true });
    Settings loaded = Load(path);
    Console.WriteLine(loaded.Theme + " / " + loaded.Notifications);
  }
}

การตั้งชื่อและการแปลงอย่างง่าย

การปรับแต่ง:

  • ใช้ Name= ใน DataMember เพื่อแมปชื่อคุณสมบัติ เช่น user_name
  • สำหรับ enum ให้กำกับแต่ละค่าด้วย EnumMember
  • สำหรับรูปแบบพิเศษ เช่น วันที่และตัวเลข ให้แปลงเป็นคุณสมบัติชนิดสตริงด้วยการแมปด้วยตนเองใน C# 6

กฎการเลือกสมาชิกสำหรับ JSON

ตรวจสอบอย่างรวดเร็ว: เมื่อใช้ DataContractJsonSerializer จะเลือกเฉพาะคุณสมบัติบางรายการให้รวมใน JSON ได้อย่างไร

สรุป

สรุป: ใช้ DataContractJsonSerializer บน C# 6 เลือกสมาชิกเข้าร่วมด้วย DataMember ปรับชื่อผ่าน Name= และอ่านหรือเขียนโดยใช้รูปแบบสตรีมที่ปลอดภัย

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

บทเรียน “JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)”

JSON ที่เหมาะกับ C# 6: ใช้ DataContractJsonSerializer ร่วมกับ [DataContract]/[DataMember] (สมาชิกที่ต้องเลือกใช้เอง) และปรับชื่ออย่างง่ายในลักษณะคล้ายตัวแปลง คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. System.IO (เส้นทางและสตรีม)
  2. JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)
  3. รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย
← กลับไปที่ C# Academy