ホームページ >バックエンド開発 >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 形式にシリアル化したり、カスタム XML 形式から逆シリアル化したりする必要があります。

<items>
  <item>

XElement を使用せずにこのシリアル化と逆シリアル化を実現するには:

Serialization

  1. 一時的なアイテムを作成するクラス:
public class Item
{
    [XmlAttribute]
    public int Id;
    [XmlAttribute]
    public string Value;
}
  1. Dictionary インスタンスの初期化:
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 を Item オブジェクトの配列に逆シリアル化します:
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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。