Heim >Backend-Entwicklung >C++ >Wie serialisiere und deserialisiere ich ein Wörterbuch aus benutzerdefiniertem XML, ohne XElement zu verwenden?

Wie serialisiere und deserialisiere ich ein Wörterbuch aus benutzerdefiniertem XML, ohne XElement zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 11:56:35463Durchsuche

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

Serialisieren und Deserialisieren in ein Wörterbuch aus benutzerdefiniertem XML ohne XElement

Bei Vorlage eines leeren Dictionary und benutzerdefinierte XML-Daten, wie das bereitgestellte Beispiel:

<items>
  <item>

Die Aufgabe, das Wörterbuch mit den bereitgestellten Schlüsseln und Werten zu füllen und es wieder in XML zu serialisieren, kann ohne Verwendung von XElement erreicht werden.

Deserialisierung

Eine temporäre Elementklasse kann eingeführt werden:

public class item
{
    [XmlAttribute]
    public int id;
    [XmlAttribute]
    public string value;
}

An Beispielwörterbuch kann wie folgt deklariert werden:

Dictionary<int, string> dict = new Dictionary<int, string>()
{
    {1,"one"}, {2,"two"}
};

Um das XML in das Wörterbuch zu deserialisieren, erstellen Sie ein XmlSerializer-Objekt:

XmlSerializer serializer = new XmlSerializer(typeof(item[]), 
                                 new XmlRootAttribute() { ElementName = "items" });

Der Deserialisierungsprozess kann dann durchgeführt werden:

var orgDict = ((item[])serializer.Deserialize(stream))
               .ToDictionary(i => i.id, i => i.value);

Serialisierung

Zum Serialisieren des Wörterbuchs Zurück in XML folgen Sie diesen Schritten:

serializer.Serialize(stream, 
              dict.Select(kv=>new item(){id = kv.Key,value=kv.Value}).ToArray() );

Alternative: Verwendung von XElement (falls bevorzugt)

Wenn XElement bevorzugt wird, kann der folgende Ansatz sein Verwendet:

Serialisierung

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(...);

Deserialisierung

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

Das obige ist der detaillierte Inhalt vonWie serialisiere und deserialisiere ich ein Wörterbuch aus benutzerdefiniertem XML, ohne XElement zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn