직렬화 가능한 클래스를 만들기 위해서는 클래스에 SerializableAttribute 특성을 적용해야 한다
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());
}
}
}
참고