직렬화 가능한 클래스를 만들기 위해서는 클래스에 SerializableAttribute 특성을 적용해야 한다

Binary를 사용한 직렬화

using System;
using System.Runtime.Serialization.Formatters.Binary; // Binary를 사용한 직렬화
using System.IO;

namespace Infodigm
{
    [Serializable()]   
    //클래스에 SerializableAttribute 특성을 적용하여 직렬화 가능한 클래스로 지정한다.
    class SerializablePeople
    {
        private string _name;

        public string Name //public 멤버는 직렬화에 포함된다.
        {
            get { return _name; }
            set { _name = value; }
        }

        public SerializablePeople(string name)
        {
            _name = name;
        }

        public override string ToString()
        {
            return "Name = " + _name;
        }
    }

    static class Program
    {
        static void Main(string[] args)
        {
            //클래스 오브젝트 생성
            SerializablePeople people = new SerializablePeople("홍길동");
            Console.WriteLine("원본 : " + people.ToString());

            //직렬화해서 저장할 파일스트림을 연다.
            Stream stream = File.Open("data.xml", FileMode.Create);

            //Binary Formatter 개체를 만든다.
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            //오브젝트를 Binary Formatter로 직렬화하여 파일스트림으로 내보낸다.
            binaryFormatter.Serialize(stream, people);

            //파일 스트림을 닫는다.
            stream.Close();

            people.Name = "DESERIALIZED";
            Console.WriteLine("직렬화 후 원본변경 : " + people.ToString());
            people = null;

            //직렬화된 파일을 연다.
            stream = File.Open("data.xml", FileMode.Open);

            //파일로부터 역직렬화하여 원래 오브젝트로 캐스팅한다.
            SerializablePeople deSerializedPeople 
            = (SerializablePeople)binaryFormatter.Deserialize(stream);
            
            stream.Close();
            Console.WriteLine("직렬화된 데이터 복원 : " + deSerializedPeople.ToString());
        }
    }
}

Untitled

참고

객체 직렬화(Serialization) 역직렬화(Deserialization)