Karsten: Deserialize mit C# (mehrere Knoten)

Guten Tag,

kann mir hier jemand sagen, wo ich gute Tutorials finde, wo erläutert wird, wie man mit C# XML-Files deseralisieren kann?
Ich möchte gerne als Objekt auf die einzelnen Werte eines Knotens zugreifen.

Meine XML Datei ist folgendermaßen aufgebaut...

<?xml ...?>

<Data>
  <ORTE>
    <NAME>...</NAME>
    ....
  </ORTE>
  <ORTE>
    <NAME>...</NAME>
    ....
  </ORTE>
  <ORTE>
    <NAME>...</NAME>
    ....
  </ORTE>
  ...
  <PERSON>
    <NAME>...</NAME>
    ...
  </PERSON>
  <PERSON>
    <NAME>...</NAME>
    ...
  </PERSON>
  <PERSON>
    <NAME>...</NAME>
    ...
  </PERSON>
  ...
  usw.
</Data>

Jetzt möchte ich die einzelnen Blöcke (ORTE, PERSON) in einer jeweils dazugehörden Collection speichern, so dass dann dort jeweils die Namen und alles weitere gesammelt werden.

Kann mir jemand einen Tipp geben?

Gruß Karsten

  1. Hallo,

    • du benutzt den Namespace System.Xml.Serialization
    • du benutzt die Klasse XmlSerializer daraus mit den geeigneten Methoden
    • du brauchst Klassen, die zu dem Xml korrespondieren
    • du deklarierst die zu serialisieren Member deiner Klasse als Public
    • du zeichnest die zu serialisierenden Member deiner Klasse mit XmlSerializer Attributen aus (XmlElementAttribute, XmlAttributeAttribute, XmlRoot)
    • du sorgst dafür das verschachtelte Typen ebenfalls serialisierbar sind

    Überigens, Hashtables können je nach .Net Framework nicht automatisch Xml-serialisiert werden.

      
    [XmlRoot("Data")]  
    class Data  
    {  
      [XmlArrayItem("ORTE")]  
      public Ort[] Orte;  
      
      [XmlArrayItem("PERSON")]  
      public Ort[] Orte;  
      
      // .. anderes zeugs  
    }  
      
    class Ort  
    {  
      [XmlElement]  
      public string NAME;  
    }  
      
    class Person  
    {  
      [XmlElement]  
      public string NAME;  
    }  
      
    using System.Xml.Serialization;  
    using System.IO;  
    using System.Text;  
    class Worker  
    {  
      static void Main()  
      {  
        Data yourDataObject = new Data();  
        // ...  
        XmlSerializer s = new XmlSerializer(typeof(Data));  
        StringBuilder sb = new StringBuilder();  
        s.Serialize(new StringWriter(sb), yourDataObject);  
        string serializedData = sb.ToString();  
    }  
    
    

    Ungeprüft, frei nach Dr. Blume.

    Genauso wie es eine Serialize() Methode gibt, gibt es auch das Gegenteil. Wenn du dir die Arbeit mit der Klassendefinition sparen möchtest, verwendest du das Utility xsd.exe aus dem .Net SDK. Es generiert dir C# Code (Klassen und Members) anhand von XML oder XSD Dateien. (in beide Richtungen).

    Ciao, Frank