[C#] XmlSerializer example

// 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을 사용할 수 있다.).

Post Author: 김 키티

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다