C# XML Deserialisierungsproblem



  • Hallo Leute 🙂

    Ich bin gerade dabei ein kleines Programm in C# zu schreiben dabei benötige ich eine Art Speicherfunktion.

    Deswegen habe ich mir überlegt die Variablen per "Speichern"-Button in eine XML-Datei zu serialisieren und dann wieder per "Laden"-Button zu deserialisieren.

    Hier ist der Code:

    C# Code---------------------------------------------------------------------
    private void Speichern_Click(object sender, EventArgs e)
    {
    // Daten serialisieren

    // Neues XML Dokument erstellen
    XmlTextWriter xwriter = new XmlTextWriter("savefile.xml", Encoding.Unicode);

    // Content
    xwriter.WriteStartDocument();
    xwriter.WriteStartElement("Content");

    // Objekt "Variable1" erzeugen
    xwriter.WriteStartElement("Variable1");
    xwriter.WriteString("variable1");
    xwriter.WriteEndElement();

    // Objekt "Variable2" erzeugen
    xwriter.WriteStartElement("Variable2");
    xwriter.WriteString("variable2");
    xwriter.WriteEndElement();

    xwriter.WriteEndElement();
    xwriter.WriteEndDocument();
    xwriter.Close();
    }

    private void Laden_Click(object sender, EventArgs e)
    {
    //Daten Deserialisieren

    XmlDocument doc = new XmlDocument();
    doc.Load("savefile.xml");
    XmlElement root = doc.DocumentElement;

    foreach (XmlNode Variable1 in root.ChildNodes)
    {
    geladenedaten.Text = variable1.InnerText;
    }

    foreach (XmlNode Variable2 in root.ChildNodes)
    {
    geladenedaten2.Text = variable2.InnerText;
    }

    }
    ---------------------------------------------------------------------------

    Durch den C# Code erzeugter Code im XML Dokument-------

    <?xml version="1.0" encoding="utf-16"?>
    <Content>
    <Variable1>variable1</Variable1>
    <Variable2>variable2</Variable2>
    </Content>
    ---------------------------------------------------------------------------

    Jetzt zu meinem Problem. Alles funktioniert super solange ich nur ein Objekt in
    mein XML-Dokument speichere, aber habe ich mehrere Objekte(Variable1,Variable2)
    dann wird immer die letzte Variable im XML Code geladen. Will ich jetzt die
    Variable1 auslesen wird mir immer die Variable 2 als Wert zurückgeliefert.

    Da ich leider nicht sehr viel Ahnung von XML habe hoffe ich ihr könnt mir bei
    diesem Problem behilflich sein.. 😃 danke schonmal



  • foreach (XmlNode Variable2 in root.ChildNodes) <-- "Variable2" ist die Benennung im Code, hat aber NICHTS mit der Variable2 im XML zu tun!
    {
        geladenedaten2.Text = variable2.InnerText;
    }
    

    ...du solltest Variable1 bzw. Variable2 aus dem XML erstmal selektieren bzw. den Namen des Nodes auswerten 😉

    foreach (XmlNode node in root.ChildNodes)
    {
       if (node.Name=="Variable2") 
       {
           geladenedaten2.Text = node.InnerText;
       }
       else if (node.Name=="Variable1")
       {
          geladenedaten.Text = node.InnerText;
       }
    }
    

    btw: http://dotnet-snippets.de/dns/objekt-in-xml-speichern-serialisieren-SID150.aspx



  • Danke für die schnelle Antwort! funktioniert super 😃


Anmelden zum Antworten