XmlSerializer 를 이용한 Object를 XML로 변환
상황에 따라 객체를
Serialization (직렬화) 하여 이 직렬화 된 객체를
다른 어플리케이션에 전달 하거나, 필요에 따라서
다른 서비스로도 전달이 되어야 할 경우가 있을 것입니다.
이번 글에서 설명 하고자 하는 부분은 바로
XmlSerializer 를 이용한 Xml Serialization 입니다.
XML serialization은 개체의 공용 속성 및 필드를 저장 또는
전송을 위해 직렬 형식(이 경우 XML)으로 변환하는 프로세스입니다
변환될 객체의 속성 명과 속성의 값 들은 해당 XML의 태그 이름과 각 태그의 값으로 변환이 될 것입니다.
한 마디로 아래의 그림과 같이 XML로 직렬화 되는 객체(Class)는
Xmlserializer를 통해서 직렬화가 이루어 진다고 할 수 있습니다.
위의 그림에서와 같이 TestObject 라는 클래스는 XmlSerializer를 통해서
메모리 상에 XML로 직렬화 되었습니다.
위의 과정을 해당 소스로 보면 다음과 같습니다.
첫번째로 XML 형식으로 직렬화되는 Object는 다음과 같습니다.
[Serializable]
public class TestObject
{
[XmlElement("Name1")]
public string TestA { get; set; }
[XmlElement("Name2")]
public string TestB { get; set; }
[XmlElement("Name3")]
public string TestC { get; set; }
[XmlElement("Name4")]
public string TestD { get; set; }
public TestObject()
{
TestA = "홍길동";
TestB = "이순신";
TestC = "임꺽정";
TestD = "김유신";
}
}
여기서 한가지 Tip은 직렬화 되는 객체의 속성위에
[XmlElement("Name1")] 이런식으로 변화되는 XML의 태그 이름을 직접 생성 할 수 있습니다.
두번째로 XmlSerializer를 사용하여 위의 TestObject 객체는 XML로 직렬화 될 것입니다.
#region Object 생성
TestObject to = new TestObject();
#endregion
#region Object --> Xml 로 변환
UTF8Encoding UTF8 = new UTF8Encoding(false);
Type[] IncludedTypes = new[] { typeof(object) };
using (MemoryStream stream = new MemoryStream(500))
{
// 생성되는 XmlWriter 개체에서 지원할 기능 집합을 지정
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings()
{
OmitXmlDeclaration = true,
Encoding = UTF8,
Indent = true
};
// Xml Data가 포함된 스트림 또는 파일을 생성할 수 있게 하는 Writer 객체 생성
using (XmlWriter xmlWriter = XmlTextWriter.Create(stream, xmlWriterSettings))
{
// 개체(TestObject)를 XML 문서로 Serializer
new XmlSerializer(to.GetType(), IncludedTypes).Serialize(xmlWriter, to);
}
string ResultString = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
ResultString += UTF8.GetString(stream.ToArray());
Response.Write(ResultString);
Response.End();
}
#endregion
Object(객체)를 Xml 직렬화 하는 과정에서 중요한 부분은 다음고 같습니다.
new XmlSerializer(to.GetType(), IncludedTypes).Serialize(xmlWriter, to);
위와 같이 XmlSerializer를 생성 및 Serialize 메소드를 통해서
XML 직렬화 과정이 진행 됩니다.
Serialize 메서드는 개체의 공용 필드 및 읽기/쓰기 속성을 XML로 변환합니다. 또한 Serialize 메서드의 매개변수
xmlWriter는 Stream 형으로 XML 문서를 쓰는 데 사용되는 Stream 입니다.
다음 매개변수인 to는 Serialize(직렬화) 할 Object(객체) 입니다.
마지막으로 다음 소스를 실행하면 변환된 XML 문서를 확인 할 수 있습니다.
MSDN 참조
http://msdn.microsoft.com/ko-kr/library/system.xml.serialization.xmlserializer(VS.80).aspx
XmlSerializerEx.zip


댓글을 달아 주세요