XML Serialziation은 클래스 객체 데이타를 XML 포맷으로 저장하는데, 특히
public 멤버만 저장한다. 즉, public이 아닌 필드/속성은 저장되지 않는다.
(이렇게 public 멤버들만 저장하는 것을 Shallow Serialization이라 부르며, 모든 멤버를 다 저장하는 것은 Deep Serialization이라 부른다.
XML Serialziation은 Shallow Serialization은, SoapFormatter/Binary Serialization은 Deep Serialization을
구현한다) 또한 Serialziation할 클래스는 public으로 선언되어져야 하며, Deserialization을 위해 파라미터가 없는 생성자를 가져야 한다.
예제
using System.IO;
using System.Xml.Serialization;
namespace Serial
{
// XML Serialzation
public class Person // 클래스는 public 이어야
{
// public 멤버만 저장
public string Name;
public int? Height;
public int Age
{
get { return _age; }
set { if (value >= 0) _age = value; }
}
// private 멤버이므로 저장 안함
private int avgWeight;
private int _age;
public Person()
{
}
public override string ToString()
{
return string.Format("{0}: {1}", Name, Age);
}
}
class PersonTest
{
private string xmlFilename = @"C:\temp\test.xml";
public void SerializePerson()
{
Person objPerson = new Person();
objPerson.Name = "홍길동";
objPerson.Age = 26;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
using (StreamWriter wr = new StreamWriter(xmlFilename))
{
xmlSerializer.Serialize(wr, objPerson);
}
}
public Person DeserializePerson()
{
Person p;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
using (StreamReader rdr = new StreamReader(xmlFilename))
{
p = (Person)xmlSerializer.Deserialize(rdr);
}
return p;
}
}
}
// 저장된 XML 파일
//
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>홍길동</Name>
<Height xsi:nil="true" />
<Age>26</Age>
</Person>