none
List collection speichern und laden RRS feed

  • Frage

  • Hallo,

    ich habe eine Collection nach folgenden Beispiel und suche einen Weg zum Speichern und Laden der Collection.

    Beispiel:

    class Adresse
    {
       public string Name = string.Empty;
       public string Stadt = string.Empty;
       public string Strasse = string.Empty;
    }
    
    List<Adresse> listAdressen = new List<Adresse>();
    

    Wie kann ich solche Listen speichern?

    Danke.

    Andreas

    Sonntag, 25. August 2013 15:33

Antworten

  • Hallo,
    das Stichwort zum Thema lautet serialisierung.Nun gibt es 2 "Grundwege":

    1. Du schreibst die Daten Manuell in eine Datei/Datenbank etc.
      Dazu musst du lediglich Alle Elemente durchgehen und die Daten irgendwie getrennt in die Datei etc. schreiben. Beim Auslesen musst du dann die einzelnen Datensätze wieder auseinander nehmen. Also Deserialisieren.
    2. Du weißt der Adresse-Klasse das SerialisableAttribut zu und lässt es mehr oder weniger automatisieren.
      Ein einfaches Beispiel wie man dann die Liste (de)serialisieren kann findest du hier.

    Grundsätzlich ist die Serialisierung über .NET immer die bessere Variante. Wenn die Daten ggf. auch per Hand bearbeitet werden müssen, bietet sich hierfür die XML-Serialisierung an. Hier gibt es die Dokumentation für die XmlSerializer-Klasse sowie ein Beispiel wie man diese Benutzt.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert AndreasM85 Mittwoch, 28. August 2013 18:48
    Sonntag, 25. August 2013 15:48
    Moderator

Alle Antworten

  • Hallo,
    das Stichwort zum Thema lautet serialisierung.Nun gibt es 2 "Grundwege":

    1. Du schreibst die Daten Manuell in eine Datei/Datenbank etc.
      Dazu musst du lediglich Alle Elemente durchgehen und die Daten irgendwie getrennt in die Datei etc. schreiben. Beim Auslesen musst du dann die einzelnen Datensätze wieder auseinander nehmen. Also Deserialisieren.
    2. Du weißt der Adresse-Klasse das SerialisableAttribut zu und lässt es mehr oder weniger automatisieren.
      Ein einfaches Beispiel wie man dann die Liste (de)serialisieren kann findest du hier.

    Grundsätzlich ist die Serialisierung über .NET immer die bessere Variante. Wenn die Daten ggf. auch per Hand bearbeitet werden müssen, bietet sich hierfür die XML-Serialisierung an. Hier gibt es die Dokumentation für die XmlSerializer-Klasse sowie ein Beispiel wie man diese Benutzt.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert AndreasM85 Mittwoch, 28. August 2013 18:48
    Sonntag, 25. August 2013 15:48
    Moderator
  • Ich habs ausprobiert. Ein paar Tage später bin ich etwas schlauer...

    Zum Ausprobieren hier ist mein Code für die Serilisierung/Deserilisierung von List Collections:

    public string Serializer(List<Adresse> list)
    {
       XmlSerializer ser;
       ser = new XmlSerializer(typeof(List<Adresse>));
       MemoryStream memStream;
          memStream = new MemoryStream();
       XmlTextWriter xmlWriter;
       xmlWriter = new XmlTextWriter(memStream, Encoding.UTF8);
       xmlWriter.Namespaces = true;
       ser.Serialize(xmlWriter, list);
       xmlWriter.Close();
       memStream.Close();
       string xml;
       xml = Encoding.UTF8.GetString(memStream.GetBuffer());
       xml = xml.Substring(xml.IndexOf(Convert.ToChar(60)));
       xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1));
       return xml;
    }
    
    public List<Adresse> Deserializer(string Xml)
    {
       XmlSerializer ser;
       ser = new XmlSerializer(typeof(List<Adresse>));
       StringReader stringReader;
       stringReader = new StringReader(Xml);
       XmlTextReader xmlReader;
       xmlReader = new XmlTextReader(stringReader);
                
       List<Adresse> list;
       list = (List<Adresse>)ser.Deserialize(xmlReader);
       xmlReader.Close();
       stringReader.Close();
       return list;
    }

    Mittwoch, 28. August 2013 18:51