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 บน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- System.IO (เส้นทางและสตรีม)
- JSON ด้วย System.Text.Json (การเลือกใช้และตัวแปลง)
- รูปแบบการแยกวิเคราะห์ CSV อย่างง่าย