.Net 2008 ] XML 직렬화
개발중에 샘플로 작성해본 코드인데
클래스별로 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 |