Tag

상황에 따라 객체를
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

저작자 표시 비영리 변경 금지
신고
Posted by JMSOFT

댓글을 달아 주세요

티스토리 툴바