ปกติแล้ว Object ที่เราสร้างขึ้นจะเก็บไว้ใน memory เพราะฉะนั้น ช่วงชีวิตมากที่สุดของมันก็จะอยู่จนกว่าโปรแกรมมันจะหยุดทำงาน คิดดูหากว่า เราสามารถเก็บ state ของมัน ไปใช้ได้ต่อ เมื่อโปรแกรมกลับมาทำงานใหม่ หรือสามารถส่ง Object เหล่านั้นไปที่อื่นได้

ปัญหามันจะเกิดก็ต่อเมื่อเราพยายามจะส่ง Object ข้ามเครื่องกัน ซึ่งเครื่องแต่ละเครื่องก็สถาปัตยกรรม แตกต่างกัน การจัดการ byte ก็แตกต่างกัน ซึ่งถ้าไม่มี Serializable แล้ว เราจะต้องมาจัดการกันเอาเอง ซึ่งคงเป็นเรื่องน่าปวดหัวมาก

Serializable จึงเข้ามาช่วยจัดการตรงนี้ให้ ทำให้เราสามารถโฟกัสไปที่ bussiness ของเรา ไม่ต้องมาปวดหัวเป็นห่วงเรื่อง conflict ที่อาจจะเกิดขึ้น

Serializable เป็นแค่ marker interface เพราะฉะนั้นเราไม่ต้อง implement method อะไรเพิ่ม class ที่สำคัญส่วนใหญ่ก็จะ implement Serializable ไว้หมดแล้ว เช่น String เป็นต้น

// collection
            IList<Person> pList = new List<Person>(){
                new Person(){ firstName="chutchai.kp", email="chutchai.kp@gmail.com", grade=13},
                new Person(){ firstName="chutchai", email="chutchai.kp@gmail.com", grade=13},
                new Person(){ firstName="kp", email="chutchai.kp@gmail.com", grade=13}
            };

            // to string
            XmlSerializer x = new XmlSerializer(pList.GetType());
            TextWriter tw = new StringWriter();
            x.Serialize(tw, pList); // tw is output
            //Console.WriteLine(tw.ToString()); // output ***

            // to object (collection)
            TextReader re = new StringReader(tw.ToString());
            var obj = x.Deserialize(re);

            Console.Read();