Laden...

Allgemeine Methode Serialization ohne Typenangabe?

Erstellt von DERKLAUS vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.115 Views
D
DERKLAUS Themenstarter:in
16 Beiträge seit 2014
vor 10 Jahren
Allgemeine Methode Serialization ohne Typenangabe?

Hallo,

ich habe mehrere Dateien, die binär gespeichert werden sollen. Es handelt sich um Klassen mit gemischten Datentypen, die zur Laufzeit im Typ List<> als Klassenarray abgelegt sind. Beim Auslesen (deserialize) ist es klar, daß man dem formatter den Datentyp angeben muß.

Beim Abspeichern (serialize) benötige ich bislang für jede Datenstruktur eine eigene Methode, die den Datentyp als Parameter erhält.

Meine Frage wäre: Kann man beim Abspeichern die Methode so allgemein halten, daß man für jede Art von Daten nur eine einzige Methode benötigt?

Die Methode für die Datei Kontenrahmen sieht derzeit so aus:


        public bool speichere_kontenrahmen_binaer(string dateiname, List<C01Konten.konto> kontenliste)
        {
            try
            {
                FileStream stream = new FileStream(dateiname, FileMode.Create);
                BinaryFormatter bformatter = new BinaryFormatter();
                bformatter.Serialize(stream, kontenliste);
                stream.Close();
                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
        }

Gewünscht wäre eine Methode, die ungefähr so aussehen soll:


        public bool speichere_binaerdatei(string dateiname, List<object> allgemeine_datenliste_ohne_typenangabe)

...

Geht das?

849 Beiträge seit 2006
vor 10 Jahren

Hallo DerKlaus,

was ist den nun deine konkrete Frage? Gehen.. natürlich.
Was hast Du probiert, woran hängts?

16.835 Beiträge seit 2008
vor 10 Jahren

Und die Frage: inwiefern das sinnvoll sein soll.

Einstellungen speichert man i.d.R. besser nicht binär...

D
DERKLAUS Themenstarter:in
16 Beiträge seit 2014
vor 10 Jahren

Ach, für List<string> gibt es doch so schöne Möglichkeiten:


       public bool speichere_textdatei(string dateiname, List<string>stringlist)
        {
            try
            {
                File.WriteAllLines(dateiname, stringlist);
                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
        }

Ok, string ist typisiert. Aber so ähnlich würde ich gern mit einer einzigen Methode alle Datentypen mit untypisierten Parametern binär speichern.

War nur die Frage, ob das ohne Aufwand geht (bitte nicht zuvor List<T> in byte[] umwandeln müssen oder vielleicht ist blockweises Schreiben der typisierten List<T> ja auch schneller als byteweises Schreiben), bzw. ob das sinnvoll oder empfehlenswert ist.

Sozusagen, es gibt im .NET tausende Klassen, vielleicht hat ja eine das verfügbar.

5.658 Beiträge seit 2006
vor 10 Jahren

Hallo DERKLAUS,

ich hoffe, dir ist schon klar, daß es etwas völlig anderes ist, einen String in eine Textdatei zu schreiben, als ein Objekt zu serialisieren. Wir helfen dir gerne wenn du ein Problem hast, aber bitte beantworte den Helfern die Fragen, die sie dir gestellt haben.

Bitte beachte [Hinweis] Wie poste ich richtig?, insbesondere die Punkte 5, 8 und 9.

Christian

Weeks of programming can save you hours of planning

P
1.090 Beiträge seit 2011
vor 10 Jahren

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern