퇴근5분전

   개발중에 샘플로 작성해본 코드인데 
클래스별로 xml 형식을 제어하기 까다로워서 다른 방법으로 해결보았음. 

기존에 XML Helper 로 만든 소스가 있지만... 아래보다 좋은데...
프로젝트에 쓸순 없공...


아래 샘플코드는 객체 ->  XML  , XML -> 객체 .

참 짧고 쉽다. 필요한경우 쓰면 좋을 듯 ...


    /// <summary>
    /// Xml 직렬화!!! 역직렬화
    /// </summary>
    public class XmlSerialize
    {
        public static string Serialize<T>(T svr)
        {
            StringBuilder XmlString = new StringBuilder();
            TextWriter writer = new StringWriter(XmlString);
            XmlSerializer serializer = new XmlSerializer(typeof(T), "Dokebi");
            serializer.Serialize(writer, svr);
            return XmlString.ToString();
        }

        public static T DeSerialize<T>( string xml ) where T : class
        {
            T DataObject = null;
            TextReader reader = new StringReader(xml);
            XmlSerializer serializer = new XmlSerializer(typeof(T), "Dokebi");
            DataObject = (T)serializer.Deserialize(reader);
            reader.Close();
            return DataObject;
        }
    }

ArrayList 가 추가된 객체로 해봤는데 뭔가 에러가 발생한는뎅..

msdn 보다 보니 IList<T> 구현된건 안된다고 봤는뎅... 링크를 못찾겠공..

오늘 본 msdn은 또 ICollection 인가 하는 인터페이스를 구현한 객체는 또 된다고 나오공...

나중에 다시 직렬화 할 일이 있을때나....

예제1 )

    [System.Xml.Serialization.XmlRoot("DemoXmlObject")]
    public class DemoXmlObject
    {
        public string ID { get; set; }
        public string Name { get; set; }
        public bool Enable { get; set; }
        [XmlIgnore]
        public string Alias { get; set; }
    }

-- 결과 -------------------------------------
<?xml version="1.0" encoding="utf-16"?>
<DemoXmlObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="Dokebi">
  <ID>ID</ID>
  <Name>테스트</Name>
  <Enable>true</Enable>
</DemoXmlObject>

 

예제2 )

    [System.Xml.Serialization.XmlRoot("DemoXmlObject")]
    public class DemoXmlObject
    {
        [XmlAttribute("ID")]
        public string ID { get; set; }
        [XmlAttribute("Name")]
        public string Name { get; set; }
        [XmlAttribute("Enable")]
        public bool Enable { get; set; }

        [XmlIgnore]
        public string Alias { get; set; }
    }


-- 결과 -------------------------------------
<?xml version="1.0" encoding="utf-16"?>
<DemoXmlObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="ID" Name="테스트" Enable="true" xmlns="Dokebi" />

 

예제 3) 더미 추가

    [System.Xml.Serialization.XmlRoot("Items")]
    public class XmlDummy<T>
    {
       public T Item { get; set; }
    }

    DemoXmlObject obj = new DemoXmlObject();
    obj.ID = "ID";
    obj.Alias = "Melong";
    obj.Name = "테스트";
    obj.Enable = true;
    string XmlString = XmlSerialize.Serialize<DemoXmlObject>(obj);
    DemoXmlObject obj2 = XmlSerialize.DeSerialize<DemoXmlObject>(XmlString);

    XmlDummy<DemoXmlObject>  dummy = new XmlDummy<DemoXmlObject>();
    dummy.Item = obj2;
    string xml3 = XmlSerialize.Serialize < XmlDummy<DemoXmlObject> >(dummy);

 

-- 결과 -------------------------------------

<?xml version="1.0" encoding="utf-16"?>
<Items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="Dokebi">
  <Item>
    <ID>ID</ID>
    <Name>테스트</Name>
    <Enable>true</Enable>
  </Item>
</Items>

'# 1) 프로그래밍' 카테고리의 다른 글

C# 포인터...  (0) 2012.03.16
컨트롤 마우스 이동 처리  (0) 2012.03.14
Conditional 속성 사용!!!  (0) 2011.10.26
서버 모니터링 프로그램~~  (0) 2011.06.26
로그 시스템...  (0) 2011.06.09