Class(객체)를 XML로 바꾸어 저장하는 것을 XML Serializer이라 한다.
XML을 Class로 복원하는 것을 XML Deserialize이라 부른다.
메모리상에 XML값을 저장하거나, 혹은 네트워크에서 Stream으로 만들어 외부에 보낼 때 사용된다.
XML Serializer
public class History
{
public string Name { get; set; }
public int Age { get; set; }
public List<string> Friends { get; set; }
}
public void Run()
{
History hClass = new History();
hClass.Name = "양뱅";
hClass.Age = 33;
hClass.Friends = new List<string>() { "양뱅", "쏭", "태발", "털", "쩌주" };
//Xml File 만들기
// Debug에 exe 생성하는 폴더에 저장
using(StreamWriter fs = new StreamWriter(@"../commoncafe.xml"))
{
XmlSerializer xmlSeri = new XmlSerializer(typeof(History));
xmlSeri.Serialize(fs, hClass);
}
//Console 에 출력
{
XmlSerializer xmlSeri = new XmlSerializer(typeof(History));
xmlSeri.Serialize(Console.Out, hClass);
//xmlSeri.Serialize(첫번째 매개변수는 TextWriter로 어디에 값을 쓸 것인지 정해주면 된다.)
}
}
결과
<?xml version="1.0" encoding="Codepage - 949"?>
<History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>양뱅</Name>
<Age>33</Age>
<Friends>
<string>양뱅</string>
<string>쏭</string>
<string>태발</string>
<string>털</string>
<string>쩌주</string>
</Friends>
</History>
XML Deserialize
public class History
{
public string Name { get; set; }
public int Age { get; set; }
public List<string> Friends { get; set; }
}
public void Run()
{
History his = new History();
// Debug에 exe 생성하는 폴더에 에서 불러온다.
using (StreamReader fs = new StreamReader(@"./commoncafe.xml"))
{
XmlSerializer xmlSeri = new XmlSerializer(typeof(History));
his = (History)xmlSeri.Deserialize(fs);
//위에 내용이 완료되면, History Class에 내용이 채워져 있다.
}
//내용이 잘 저장 되었는지 Consol에 표시해 보겠습니다.
his.GetType().GetProperties().Select(f => new {
name = f.Name,
value = f.PropertyType.Equals(typeof(List<string>)) ? string.Join(",", (List<string>)f.GetValue(his)) : f.GetValue(his)
})
.ToList()
.ForEach(f => { Console.WriteLine($"{f.name} : {f.value}"); });
}
결과
Name : 양뱅
Age : 33
Friends : 양뱅,쏭,태발,털,쩌주