반응형
해당 글에서는 XML 직렬화, 역직렬화하는 방법을 알 수 있다. 간단하게 직렬화와 역직렬화를 설명하겠다.
직렬화는 객체를 바이너리 형식으로 변환하는거며 역직렬화는 바이너리를 객체로 변환하는 거다. 직렬화와 역직렬화는 결국 반대의 일을 해주는 것이다. 데이터를 주고받는 형식으로 JSON 외 XML이 주로 사용되고 있으니 알아두면 유용하게 사용할 수 있다.
XmlSerializer
네임스페이스 : System.Xml.Serialization
어셈블리 : System.Xml.XmlSerializer.dll
XMl 형식으로 객체를 직렬화하고, 역직렬화 하는데 사용하는 클래스이다.
아래 직렬화, 역직렬화 예시는 학교(School) 관련 정보를 기반으로 간략한 예시로 설명하도록 하겠다.
Class
School
[Serializable]
[XmlRoot(elementName: "school")]
public class School
{
[XmlElement(elementName: "name")]
public string Name { get; set; }
[XmlElement(elementName: "location")]
public string Location { get; set; }
[XmlElement(elementName: "students")]
public int Students { get; set; }
}
Schools
[Serializable]
[XmlRoot(elementName: "schools")]
public class Schools
{
[XmlElement(elementName: "school")]
public List<School> schoolList { get; set; }
}
직렬화 (Serialize)
XmlSerializer xs = new XmlSerializer(typeof(Schools));
Schools schools = new Schools()
{
schoolList = new List<School>()
};
Enumerable.Range(1, 3).ToList().ForEach(x =>
{
schools.schoolList.Add(new School()
{
Name = $"{x}-School",
Location = "Seoul",
Students = x * 1000
});
});
using (StringWriter sw = new StringWriter())
{
xs.Serialize(sw, schools);
Console.WriteLine(sw.ToString());
}
List<School> 에 3개의 데이터를 등록 후 직렬화 하는 코드이다.
[출력]
<?xml version="1.0" encoding="utf-16"?>
<schools xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<school>
<name>1-School</name>
<location>Seoul</location>
<students>1000</students>
</school>
<school>
<name>2-School</name>
<location>Seoul</location>
<students>2000</students>
</school>
<school>
<name>3-School</name>
<location>Seoul</location>
<students>3000</students>
</school>
</schools>
역직렬화 (Deserialize)
string xmlData = @"<schools>
<school>
<name>ABC School</name>
<location>New York, NY</location>
<students>1000</students>
</school>
<school>
<name>XYZ School</name>
<location>Los Angeles, CA</location>
<students>1500</students>
</school>
</schools>";
Schools schools = new Schools();
using (StringReader sr = new StringReader(xmlData))
{
schools = (Schools)xs.Deserialize(sr);
}
foreach (School school in schools.schoolList)
{
Console.WriteLine($"{school.Name} / {school.Location} / {school.Students}");
}
[출력]
ABC School / New York, NY / 1000
XYZ School / Los Angeles, CA / 1500
반응형
'Programming > C# & .NET' 카테고리의 다른 글
[C#] XmlElement 여러개 설정 (1) | 2023.01.11 |
---|---|
[C#] XMl 직렬화, 역직렬화 Method 공유 (2) | 2023.01.06 |
[C#] switch 식 (1) | 2022.12.02 |
[C#] 확장메서드 (Extension Method) (1) | 2022.10.28 |
[C#] List 정렬 총정리(기본정렬, 여러개 정렬) (0) | 2022.10.18 |
댓글