>백엔드 개발 >C++ >XElement를 사용하지 않고 사전을 사용자 지정 XML로 직렬화 및 역직렬화하는 방법은 무엇입니까?

XElement를 사용하지 않고 사전을 사용자 지정 XML로 직렬화 및 역직렬화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-04 06:26:40793검색

How to Serialize and Deserialize a Dictionary to Custom XML Without Using XElement?

사전 직렬화 및 역직렬화 XElement가 없는 사용자 정의 XML에서

Dictionary 다음과 같은 사용자 지정 XML 형식으로 직렬화하고 역직렬화해야 합니다.

<items>
  <item>

XElement를 사용하지 않고 이 직렬화 및 역직렬화를 수행하려면:

직렬화

  1. 임시 아이템 만들기 클래스:
public class Item
{
    [XmlAttribute]
    public int Id;
    [XmlAttribute]
    public string Value;
}
  1. 사전 인스턴스 초기화:
Dictionary<int, string> dict = new Dictionary<int, string>()
{
    { 1, "one" }, { 2, "two" }
};
  1. XmlSerializer 인스턴스 만들기:
XmlSerializer serializer = new XmlSerializer(typeof(Item[]), new XmlRootAttribute() { ElementName = "items" });
  1. 사전을 다음으로 직렬화합니다. XML:
serializer.Serialize(stream, dict.Select(kv => new Item() { Id = kv.Key, Value = kv.Value }).ToArray());

역직렬화

  1. XML을 항목 개체 배열로 역직렬화:
var orgDict = ((Item[])serializer.Deserialize(stream))
               .ToDictionary(i => i.Id, i => i.Value);

XElement를 사용하는 대안

나중에 XElement를 사용하기로 결정했다면 다음을 참고하세요. 직렬화 및 역직렬화 방법:

직렬화

XElement xElem = new XElement(
                    "items",
                    dict.Select(x => new XElement("item", new XAttribute("id", x.Key), new XAttribute("value", x.Value)))
                 );
var xml = xElem.ToString(); //xElem.Save(...);

직렬화 해제

XElement xElem2 = XElement.Parse(xml); //XElement.Load(...)
var newDict = xElem2.Descendants("item")
                    .ToDictionary(x => (int)x.Attribute("id"), x => (string)x.Attribute("value"));

위 내용은 XElement를 사용하지 않고 사전을 사용자 지정 XML로 직렬화 및 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.