// This is the test class we want to // serialize: [Serializable()] public class TestClass { private string someString; public string SomeString { get { return someString; } set { someString = value; } } private List<string> settings = new List<string>(); public List<string> Settings { get { return settings; } set { settings = value; } } // These will be ignored [NonSerialized()] private int willBeIgnored1 = 1; private int willBeIgnored2 = 1; } // Example code // This example requires: // using System.Xml.Serialization; // using System.IO; // Create a new instance of the test class TestClass TestObj = new TestClass(); // Set some dummy values TestObj.SomeString = "foo"; TestObj.Settings.Add("A"); TestObj.Settings.Add("B"); TestObj.Settings.Add("C"); #region Save the object // Create a new XmlSerializer instance with the type of the test class XmlSerializer SerializerObj = new XmlSerializer(typeof(TestClass)); // Create a new file stream to write the serialized object to a file TextWriter WriteFileStream = new StreamWriter(@"C:\test.xml"); SerializerObj.Serialize(WriteFileStream, TestObj); // Cleanup WriteFileStream.Close(); #endregion /* The test.xml file will look like this: <?xml version="1.0"?> <TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SomeString>foo</SomeString> <Settings> <string>A</string> <string>B</string> <string>C</string> </Settings> </TestClass> */ #region Load the object // Create a new file stream for reading the XML file FileStream ReadFileStream = new FileStream(@"C:\test.xml", FileMode.Open, FileAccess.Read, FileShare.Read); // Load the object saved above by using the Deserialize function TestClass LoadedObj = (TestClass)SerializerObj.Deserialize(ReadFileStream); // Cleanup ReadFileStream.Close(); #endregion // Test the new loaded object: MessageBox.Show(LoadedObj.SomeString); foreach (string Setting in LoadedObj.Settings) MessageBox.Show(Setting);
메모리 상의 .NET 객체를 XML로 만들어 저장하는 것을 XML Serialization이라 부르고,
반대로 XML을 .NET 객체로 복원하는 것을 XML Deserialization이라 부른다.
Serialization에서의 XML은 파일로 저장될 수도 있고, 네트워크 스트림으로 만들어져 외부로 보내질 수도 있으며,
혹은 데이타베이스에 저장될 수도 있다.
.NET Framework에서 XML Serialization 기능을 사용하기 위해서는
System.Xml.Serialization 네임스페이스에 있는 XmlSerializer 클래스를 사용하면 된다.
즉, XmlSerializer 클래스의 Serialize() 메서드를 사용하면 .NET 객체를 XML로 변환할 수 있으며,
Deserialize() 메서드를 사용하면 반대로 XML을 .NET 객체로 변환할 수 있다.
.NET에서 기본적으로 한 클래스의 모든 public 필드와 속성들은 XML로 Serialization 할 수 있다.
클래스는 public으로 선언되어야 하며, public 필드/속성 이외의 private 필드/속성들은 Serialization 되지 않는다.
(만약 private 필드들을 Serialization 해야 한다면, IXmlSerializable 인터페이스를 구현해서 사용하거나
꼭 XML 포맷일 필요가 없으면 BinaryFormatter 클래스를 사용하여 Binary Serialization을 사용할 수 있다.).