Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# List<T> serialisieren (https://www.delphipraxis.net/60734-list-t-serialisieren.html)

DGL-luke 11. Jan 2006 19:34


List<T> serialisieren
 
Hallo,

ich arbeite zwar mit VC#, aber ich denke nicht, dass das ein Problem ist ;)

Kann ich komplette Komponenten einfach serialisieren, sprich ihre Speicherbelegung bzw. ihre Properties in eine Datei speichern und wieder laden? Mir würde es hier im speziellen um eine generische Liste gehen, die ich natürlich inklusive der gehaltenen Instanzen speichern möchte... da .Net ja mehr oder weniger per VM läuft, muss das doch gehen, oder?

Im Notfall muss ichs halt selber machen...

LarsMiddendorf 11. Jan 2006 19:44

Re: List<T> serialisieren
 
Speichern:
Code:
BinaryFormatter bf=new BinaryFormatter();
using (Stream st=....)
{
  bf.Serialize(st,obj);
}
Laden:
Code:
BinaryFormatter bf=new BinaryFormatter();
using (Stream st=....)
{
 obj= bf.Deserialize(st,obj);
}

Khabarakh 11. Jan 2006 20:30

Re: List<T> serialisieren
 
Wenn einer Klasse das Serializable-Attribut zugeordnet ist (wie es bei List<T> der Fall ist) und keine speziellen Bemerkungen im SDK stehen, kannst du davon ausgehen, dass der gesamte Inhalt serialisiert wird. Wenn du auf Nummer sicher gehen willst, kannst du immer noch unter dem Reflector in der Klasse nach ISerializable und NonSerializedAttribute suchen :wink: .

Zitat:

... da .Net ja mehr oder weniger per VM läuft, muss das doch gehen, oder?
Die RTTI kann mit Reflection zwar nicht mithalten, aber einfaches Serialisieren ist doch auch unter Delphi ohne Quasi-VM möglich :gruebel: .

DGL-luke 13. Jan 2006 14:38

Re: List<T> serialisieren
 
Danke für den weitere Info.

Ja, Delphi kann auch serialisieren...

DerDan 13. Jan 2006 15:16

Re: List<T> serialisieren
 
Zitat:

Zitat von DGL-luke
Danke für den weitere Info.

Ja, Delphi kann auch serialisieren...

Und wie geht das da?

Elvis 13. Jan 2006 17:35

Re: List<T> serialisieren
 
Zitat:

Zitat von DerDan
Zitat:

Zitat von DGL-luke
Ja, Delphi kann auch serialisieren...

Und wie geht das da?

Um 5 Ecken und 7 Kanten bzw. autom. nur für published Properties. Schaue dir dazu einfach mal die dpCollection oder die DFM eines Formulares an. Mit den Möglichkeiten, die man aus .Net kennt würde ich das nicht wirklich vergleichen wollen.

dragi 13. Jan 2006 17:45

Re: List<T> serialisieren
 
Ich habe mich mit diesem Thema noch nciht eingehend beschäftigt, welche Anwendungsfälle gibt es um serialisierung zu nutzen? Mir fällt nicht ein wofr man das nutzt. Wäre dankbar für ein paar Anwendungsbeispiele.

Danke

dragi

DGL-luke 13. Jan 2006 19:26

Re: List<T> serialisieren
 
Naja, Serialisierung ist eigentlich absolut egal genial: Du nimmt eine komplette Instanz einer Klasse, frierst sie ein, holst dir den bytecode, und wann immer du lust auf TK-Ware hast, holst du sie dir wieder ;)
Kein Rumgemurkse mit Ini-Dateien, einfach einen Listentyp implementieren oder ein Dictionary (für die klassische Key-Value-Zuordnung) und speichern und laden, wie du lustig bist ;)

EDIT: :shock: was hab ich denn da verbrochen?!

kiar 13. Jan 2006 20:33

Re: List<T> serialisieren
 
moin dragi,

um das ganze mit ein bisschen code zu zeigen machen wir mal folgendes wir haben 3 Auto's, die wir in einer liste haben wollen. Die Klasse Auto sieht wie folgt aus
Code:
 
public Auto()
        {
        }
        public Auto(int Index, string Marke, string Kennzeichen)
        {
            this.Index = Index;
            this.Marke = Marke;
            this.Kennzeichen = Kennzeichen;
        }
Nun generieren wir eine Form schmeissen da eine Combobox, eine TextBox und einen Button drauf.

im click des Buttons schreiben wir jetzt:
Code:
List<Auto> autos = new List<Auto>();
            autos.Add(new Auto(1, "Ford",   "ASL - PD 89"));
            autos.Add(new Auto(2, "Mazda", "ASL - BA 169"));
            autos.Add(new Auto(3, "Audi",   "ASL - KH 66"));
           
           
            XmlSerializer mySer = new System.Xml.Serialization.XmlSerializer(typeof(List<Auto>));
            FileStream fs = new FileStream("Auto.xml", FileMode.Create, FileAccess.Write);
            mySer.Serialize(fs, autos);
            fs.Close();
alles meine Auto's :mrgreen:
Danach haben wir eine Datei die so:
XML-Code:
<?xml version="1.0"?>
<ArrayOfAuto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Auto>
    <Marke>Ford</Marke>
    <Kennzeichen>ASL - PD 89</Kennzeichen>
    <Index>1</Index>
  </Auto>
  <Auto>
    <Marke>Mazda</Marke>
    <Kennzeichen>ASL - BA 169</Kennzeichen>
    <Index>2</Index>
  </Auto>
  <Auto>
    <Marke>Audi</Marke>
    <Kennzeichen>ASL - KH 66</Kennzeichen>
    <Index>3</Index>
  </Auto>
</ArrayOfAuto>
aussieht.

wenn du jetz noch folgendes in den Click des Button einfügst hast du das geniale des Databinding vor Augen
Code:
 comboBox1.DataSource = autos;
         tBox_Kennzeichen.DataBindings.Add("Text", autos, "Kennzeichen");
wie kann mann den C# Code formatieren :gruebel:

raik


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz