Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Object in XML Speichern (https://www.delphipraxis.net/72552-object-xml-speichern.html)

Martin W 2. Jul 2006 20:09


Object in XML Speichern
 
Hi an alle :-)


Delphi-Quellcode:
type
  TServerProfile = class(TObject)
    FName    : string;
    FPassword : string;
  end;

  TSingleServer = class(TObject)
    FName    : string;
    FHost    : string;
    FPort    : integer;
    FPassword : string;
    FComment : string;
    FProfiles : array of TServerProfile;
  end;

  TServerList = class(TObject)
    FServers : array of TSingleServer;
  end;

var
  Servers: TServerList;
Wie kann ich das ganze sinnvoll speichern und wieder laden ? In .net geht es mit Hilfe von ner XML Serialisiserung... wie geht es unter Win32 ???

Gibt es unter Win32 vergleichbares??


Gruß
Martin

[edit=Admin]Beitrag auf Wunsch des Autors editiert. Mfg, Daniel[/edit]

arbu man 2. Jul 2006 20:12

Re: Object in XML Speichern
 
Du könntest da was mit Typeinfo machen wie man die propertys auflistet wird hier beschrieben

Martin W 2. Jul 2006 20:39

Re: Object in XML Speichern
 
Was .net ähnlich gibt es net?? Da waren es 4 Zeilen Code die ich brauchte...

Khabarakh 2. Jul 2006 20:45

Re: Object in XML Speichern
 
Es geht weder so einfach noch so schön, aber es geht.
  • Leite alle zu serialisierenden Klassen von TComponent ab.
  • Füge für alle zu serialiserenden Felder published Properties ein (*schüttel*).
  • Deine Arrays musst du dafür AFAIK mit TCollections ersetzen.
  • Read/WriteComponentRes oder TStream.Read/WriteComponent

@arbu man: Wäre eine Möglichkeit :stupid: ...

[edit]
Und XML ist es auch nicht.
[/edit]

Martin W 2. Jul 2006 21:10

Re: Object in XML Speichern
 
Aber was vergleichbares gibt es nicht??? :wiejetzt:


Kann ich eine DLL in .net schreiben und dann mit der Win32 Anwendung das Object übergeben?

Khabarakh 2. Jul 2006 21:19

Re: Object in XML Speichern
 
Soo schlecht ist doch die RTTI-Serialisierung auch wieder nicht :gruebel: .

Deine Idee ist allerdings zum Scheitern verurteilt. Selbst wenn du das Objekt über irgendwelche COM-Umwege in den managed Code bringen würdest, hättest du keinen Zugriff auf die Felder.

Martin W 2. Jul 2006 21:37

Re: Object in XML Speichern
 
Zitat:

* Leite alle zu serialisierenden Klassen von TComponent ab.
* Füge für alle zu serialiserenden Felder published Properties ein (*schüttel*).
* Deine Arrays musst du dafür AFAIK mit TCollections ersetzen.
* Read/WriteComponentRes oder TStream.Read/WriteComponent

Könnte mir einer dafür nen Beispiel geben? Also Source Code...

sh17 11. Jul 2006 11:59

Re: Object in XML Speichern
 
Ich würde eine Helper-Klasse mit 2 statischen Metoden bauen, die das übergebene Objekt in XML schreibt und wieder ausliest (in Datei, Stream, ...).

Khabarakh 11. Jul 2006 12:16

Re: Object in XML Speichern
 
Zitat:

Zitat von sh17
Ich würde eine Helper-Klasse mit 2 statischen Metoden bauen, die das übergebene Objekt in XML schreibt und wieder ausliest (in Datei, Stream, ...).

Nicht gerade das, was man unter einer generischen Lösung versteht...

@Martin W: Wo hakt es denn genau?
Wenn deine Klasse fertig ist, musst du im einfachsten Falle nur noch
Delphi-Quellcode:
WriteComponentRes(myObject, ...);
aufrufen.
Für die Collections kannst du dir auch mal die DP-Collection anschauen.

sh17 11. Jul 2006 12:23

Re: Object in XML Speichern
 
Zitat:

Zitat von Khabarakh
Nicht gerade das, was man unter einer generischen Lösung versteht...

dafür fexibel und eine Möglichkeit, wenn man nicht von TComponent erben kann. Zumal man XML wenigstens noch lesen kann.

Der_Unwissende 11. Jul 2006 12:33

Re: Object in XML Speichern
 
Zitat:

Zitat von sh17
Zitat:

Zitat von Khabarakh
Nicht gerade das, was man unter einer generischen Lösung versteht...

dafür fexibel

Hi,
sorry aber wie kommst du denn auf die Idee? Ich meine flexibel? Ich muss für jede Klasse, die ich serialisieren möchte eine eigene Hilfsklasse/Methode bauen. Da fände ich eine wirklich generische Lösung doch deutlich schöner.
Am schönsten wäre es ohne Frage, wenn Delphi ein vollständiges Pendant zur Java Reflection bieten würde, dann wäre ein generischer (De-)Serialisierer gar kein Problem. Und wie man speichert, dass ist doch nun echt Geschmackssache.

Gruß Der Unwissende

sh17 11. Jul 2006 12:39

Re: Object in XML Speichern
 
flexibel in bezug auf die eigenschaften der klasse.

Was passiert denn beim Laden einer einer Klasse auf obigen Wege, wenn sich deren Struktur geändert hat? (Liste umbenannt, typ geändert). Bei XML kann ich da besser reagieren, entweder der tag ist da oder nicht.

den Aufwand für die Hilfsklasse möchte ich ja gar nicht abstreiten, ich streube mich ja nur gegen die Nutzung der RTTI, die mich an Delphi bindet (oder?)

DerDan 11. Jul 2006 13:25

Re: Object in XML Speichern
 
Zitat:

Zitat von sh17
ich streube mich ja nur gegen die Nutzung der RTTI, die mich an Delphi bindet (oder?)

In Pascal zu schreiben bindet auch schon an delphi oder nicht?

DerDan

sh17 11. Jul 2006 13:28

Re: Object in XML Speichern
 
Zitat:

Zitat von DerDan
In Pascal zu schreiben bindet auch schon an delphi oder nicht?

Um auf meine gespeicherten Daten in XML zuzugreifen, brauch ich kein Delphi.

mehr sag ich dazu jetzt nicht, da es Martin W nicht weiter bringt.

Der_Unwissende 11. Jul 2006 13:31

Re: Object in XML Speichern
 
Sorry, hab nicht wirklich klar gemacht worauf ich mich bezogen habe.
Hast natürlich recht, das XML flexibler ist, hab nur das Serialisieren eines Objekts als allgemeines Betrachtet, nicht den konkreten aufruf von WriteComponentRes (der ja auch nur im einfachsten Fall erfolgen sollte).
RTTI finde ich ist auch keine wirklich großartige Sache, Reflections fehlern hier einfach immer wieder (beziehe mich dabei nicht allein auf Java, weiß nur nicht wie die in C# oder woanders heißen). Jedenfalls gibt es ein paar Sprachen, bei denen es möglich ist, alle Felder (und Methoden) einer Klasse über ein bestimmtes Interface abzufragen. Damit kann man sehr schöne Frameworks erstellen, gerade wenn es um Objekt-Serialisierung geht. Natürlich geht das in Delphi mit RTTI und allen Eigenschaften die gesichert werden sollen als Properties, aber eben nur mit denen.
Hinzu kommt dann noch, dass z.B. ein einfaches toString nicht möglich ist, denn hier würden (sehr unvollständig) auch wieder nur die Properties umgewandelt werden können...

Wie gesagt, die Flexibilität von XML beim Speichern möchte ich gar nicht in Frage stellen!

Martin W 11. Jul 2006 13:47

Re: Object in XML Speichern
 
Hey danke für eure Antworte, das habe ich gesucht !!! Noch mal DAnke!!! Ihr seid die besten ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.

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