การทำให้เป็นอนุกรมและดีซีเรียลไลซ์ใน C # พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
การซีเรียลไลเซชันใน C# จะแปลงอ็อบเจ็กต์ให้เป็นสตรีมของไบต์เพื่อให้สามารถบันทึกไปยังไฟล์หรือส่งต่อระหว่างแอปพลิเคชันได้ ส่วนการดีซีเรียลไลเซชันจะสร้างอ็อบเจ็กต์ขึ้นมาใหม่ ในที่นี้คุณจะได้เรียนรู้วิธีการซีเรียลไลเซชันและดีซีเรียลไลเซชันอ็อบเจ็กต์พร้อมตัวอย่าง

การทำให้เป็นอนุกรมและดีซีเรียลไลซ์ใน C#
แนวคิดของการแปลงข้อมูลเป็นรูปแบบที่สามารถจัดเก็บได้ (Serialization) และการแปลงข้อมูลกลับเป็นรูปแบบที่สามารถจัดเก็บได้ (Deserialization) ถูกนำมาใช้เมื่อใดก็ตามที่ต้องส่งข้อมูลที่เกี่ยวข้องกับวัตถุจากแอปพลิเคชันหนึ่งไปยังอีกแอปพลิเคชันหนึ่ง การแปลงข้อมูลเป็นรูปแบบที่สามารถจัดเก็บได้ใช้เพื่อส่งออกข้อมูลจากแอปพลิเคชันหนึ่งไปยังไฟล์ จากนั้นแอปพลิเคชันปลายทางจะใช้การแปลงข้อมูลกลับเป็นรูปแบบที่สามารถจัดเก็บได้เพื่อส่งออกข้อมูลอีกครั้งtracนำข้อมูลจากแอปพลิเคชันไปใช้ประโยชน์เพิ่มเติม
การทำให้เป็นอนุกรมเป็นแนวคิดที่อ็อบเจ็กต์คลาส C# ถูกเขียนหรือทำให้เป็นอนุกรมไปยังไฟล์ สมมติว่าคุณมีคลาส C# ชื่อ Tutorial และคลาสมีคุณสมบัติ 2 อย่างคือ ID และชื่อ Tutorials
การทำให้เป็นอนุกรมสามารถใช้เพื่อเขียนคุณสมบัติข้อมูลของคลาส Tutorial ลงในไฟล์ได้โดยตรง ใช้เพื่ออ่านข้อมูลจากไฟล์และสร้างออบเจ็กต์บทช่วยสอนอีกครั้ง
ประเภทของการทำให้เป็นอนุกรมใน C#
C# รองรับรูปแบบการจัดเก็บข้อมูลหลายรูปแบบ และคุณควรเลือกรูปแบบที่เหมาะสมตามการใช้งานข้อมูลนั้นๆ รูปแบบหลักๆ มีดังต่อไปนี้
- การแปลงเป็นอนุกรมไบนารี แปลงอ็อบเจ็กต์ให้เป็นสตรีมไบนารีขนาดกะทัดรัด ทำงานได้เร็ว แต่ไม่สามารถอ่านได้ง่ายสำหรับมนุษย์ และผูกติดอยู่กับ .NET
- การแปลง XML เป็นอนุกรม ใช้คลาส XmlSerializer เพื่อเขียนคุณสมบัติสาธารณะของอ็อบเจ็กต์ลงในไฟล์ XML ที่อ่านได้
- การแปลงเป็น JSON ใช้ System.Text.Json หรือ Newtonsoft.Json เพื่อสร้าง JSON ที่มีน้ำหนักเบา ซึ่งเป็นรูปแบบที่พบได้บ่อยที่สุดสำหรับเว็บ API
- การจัดลำดับ SOAP จัดรูปแบบข้อมูลเป็นข้อความ SOAP สำหรับเว็บเซอร์วิสรุ่นเก่า
วิธีการทำให้วัตถุเป็นอนุกรมใน C#
ลองดูตัวอย่างว่าเราจะบรรลุเป้าหมายนี้ได้อย่างไร
ในตัวอย่างของเรา เราจะดำเนินการตามขั้นตอนระดับสูงด้านล่างในโค้ด
- สร้างคลาสชื่อ Tutorial ซึ่งมี 2 คุณสมบัติ คือ ID และ Name
- จากนั้นเราจะสร้างวัตถุจากคลาสและกำหนดค่า "1" ให้กับคุณสมบัติ ID และค่า ".Net" ให้กับคุณสมบัติชื่อ
- จากนั้นเราจะใช้การทำให้เป็นอนุกรมเพื่อทำให้ออบเจ็กต์ด้านบนเป็นอนุกรมไปยังไฟล์ชื่อ Example.txt
- สุดท้าย เราจะใช้การดีซีเรียลไลซ์อ็อบเจ็กต์จากไฟล์และแสดงค่าในคอนโซล
ป้อนโค้ดด้านล่างในไฟล์ program.cs ของแอปพลิเคชันคอนโซล
ขั้นตอน 1) เพิ่มชั้นเรียน
ขั้นตอนแรกคือการเพิ่มคลาสที่จะใช้สำหรับการทำให้เป็นอนุกรม
Code คำอธิบาย:-
- คลาสที่ต้องทำให้เป็นอนุกรมจำเป็นต้องมีแอตทริบิวต์ [Serializable] นี่คือคำหลักใน C# จากนั้นคีย์เวิร์ดนี้จะแนบไปกับคลาสการสอน หากคุณไม่พูดถึงคุณลักษณะนี้ คุณจะได้รับข้อผิดพลาดเมื่อคุณพยายามทำให้คลาสเป็นอนุกรม
- ถัดไปคือคำจำกัดความของคลาสที่จะถูกทำให้เป็นอนุกรม ที่นี่เรากำลังกำหนดคลาสที่เรียกว่า "บทช่วยสอน" และจัดเตรียมคุณสมบัติ 2 รายการ อันหนึ่งคือ "ID" และอีกอันคือ "ชื่อ"
ขั้นตอน 2) สร้างวัตถุ
ในขั้นตอนนี้ ขั้นแรกเราจะสร้างอ็อบเจ็กต์ของคลาส Tutorial และทำให้เป็นอนุกรมไปยังไฟล์ชื่อ Example.txt
Code คำอธิบาย:-
- ขั้นแรก เราสร้างออบเจ็กต์ของคลาส Tutorial จากนั้นเราจะกำหนดค่า "1" ให้กับ ID และ ".net" ให้กับคุณสมบัติชื่อ
- จากนั้นเราใช้คลาสตัวจัดรูปแบบที่ใช้ในการทำให้เป็นอนุกรมหรือแปลงวัตถุเป็นรูปแบบไบนารี ข้อมูลในไฟล์ในการซีเรียลไลซ์จะทำในรูปแบบไบนารี ต่อไปเราจะสร้างออบเจ็กต์สตรีมไฟล์ ออบเจ็กต์สตรีมไฟล์ใช้เพื่อเปิดไฟล์ Example.txt เพื่อวัตถุประสงค์ในการเขียน คำสำคัญ FileMode.Create และ FileMode.Write ใช้เพื่อระบุโดยเฉพาะว่าควรเปิดไฟล์เพื่อการเขียน
- สุดท้ายเราใช้วิธี Serialize เพื่อถ่ายโอนข้อมูลไบนารี่ไปยังไฟล์ จากนั้นเราก็ปิดสตรีมตั้งแต่เขียน การดำเนินการ เสร็จสมบูรณ์
ขั้นตอน 3) ใช้การดีซีเรียลไลซ์
สุดท้ายเพื่อให้แน่ใจว่าข้อมูลมีอยู่ในไฟล์ เราจะใช้การดีซีเรียลไลซ์เพื่อดีซีเรียลไลซ์อ็อบเจ็กต์จากไฟล์
using System; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace DemoApplication { [Serializable] class Tutorial { public int ID; public String Name; static void Main(string[] args) { Tutorial obj = new Tutorial(); obj.ID = 1; obj.Name = ".Net"; IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write); formatter.Serialize(stream, obj); stream.Close(); stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read); Tutorial objnew = (Tutorial)formatter.Deserialize(stream); Console.WriteLine(objnew.ID); Console.WriteLine(objnew.Name); Console.ReadKey(); } } }
Code คำอธิบาย:-
- เราสร้างวัตถุ”กระแส” เพื่อเปิดไฟล์ Example.txt ในโหมดอ่านอย่างเดียว
- จากนั้นเราใช้คลาสฟอร์แมตเตอร์ที่ใช้ในการดีซีเรียลไลซ์อ็อบเจ็กต์ ซึ่งจัดเก็บไว้ในไฟล์ Example.txt วัตถุที่ส่งคืนถูกตั้งค่าเป็นวัตถุ objnew
- สุดท้ายนี้ เราจะแสดงคุณสมบัติของวัตถุ “objnew” ไปยังคอนโซลโดยใช้คุณสมบัติ “ID” และ “ชื่อ”
เมื่อตั้งค่าโค้ดข้างต้นแล้ว และโปรเจ็กต์ถูกรันโดยใช้ Visual Studioคุณจะได้ผลลัพธ์ด้านล่าง
ผลลัพธ์:-
คุณสามารถดูได้จากเอาต์พุตด้านบนว่าค่าจากไฟล์ได้รับการดีซีเรียลไลซ์อย่างถูกต้องและแสดงในคอนโซล
การแปลงข้อมูล JSON เป็นอนุกรมใน C#
JSON เป็นรูปแบบที่ใช้กันอย่างแพร่หลายที่สุดสำหรับแอปพลิเคชันสมัยใหม่และเว็บ API โดยมีฟังก์ชันในตัว System.Text.Json เนมสเปซจะทำการแปลงอ็อบเจ็กต์เป็นรูปแบบอนุกรมและแปลงกลับเป็นรูปแบบเดิมด้วยการเรียกใช้เมธอดเพียงครั้งเดียว ดังแสดงในภาพด้านล่าง
using System; using System.Text.Json; namespace DemoApplication { class Tutorial { public int ID { get; set; } public string Name { get; set; } } class Program { static void Main(string[] args) { Tutorial obj = new Tutorial { ID = 1, Name = ".Net" }; string json = JsonSerializer.Serialize(obj); Console.WriteLine(json); Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial)); Console.WriteLine(objnew.Name); Console.ReadKey(); } } }
Output:
{"ID":1,"Name":".Net"}
.Net




