การทำ serialize ก็คือการทำให้วัตถุอยู่ในรูปแบบที่สามารถส่งต่อหรือจัดเก็บไว้
ใน C#.NET ก็ได้มี Class เอาไว้ใช้ในการจัดการอยู่แล้ว โดยจะมีอยู่สองตัวหลักๆคือ
การทำให้เป็น Binary กับการทำให้เป็น XML
สำหรับวันนี้ผมไม่ได้สนใจ XML เพราะว่าผลลัพธ์ที่ได้จะมีขนาดใหญ่มาก
การใช้งานนั้น ก่อนอื่นต้องเรียกใช้ namespaces ดังนี้
using System.IO; using System.Runtime.Serialization.Formatters.Binary; |
สำหรับตัวอย่างการใช้งาน code จะมีดังนี้
Object obj = new Object(); //ตัว object ที่ต้องการ serialize Stream stream = File.Open("output.bin", FileMode.Create); BinaryFormatter bin = new BinaryFormatter(); bin.Serialize(stream, obj); |
ถ้ายังไม่รู้ว่าจะเอาไปใช้งายอย่างไรดี ผมมี method สำเร็จรูปมาให้ใช้งานกันง่ายๆครับ
//Static Method public static void Serialize(String fileName, Object obj) { BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fileStream = new FileStream(fileName, FileMode.Create); try { binaryFormatter.Serialize(fileStream, obj); } catch (Exception ex) { Console.WriteLine("Error: The object could not be serialized - " + ex.Message + "\n" + ex.StackTrace); } finally { fileStream.Close(); } } |
ตัวอย่างของโปรแกรมที่ใช้งาน Object Serialization ที่ผมทำก็คือ BMS Game 1.7
โดยจะใช้กับ BMSReader object ทำให้ครั้งต่อไปที่เล่นเพลงนี้ สามารถดึงข้อมูลจากไฟล์ๆเดียวได้เลยและไม่ต้องประมวลผลข้อมูลไฟล์ BMS ซ้ำอีกรอบ
เนื่องจากใน BMSReader ได้มี Array ของ MemoryStream เอาไว้ด้วย ซึ่งภายใน Array นี้ก็จะเก็บข้อมูลของไฟล์เสียงและภาพเอาไว้หมด