Objekt serialisieren
Hallo,
ich möchte alle published-Eigenschaften eines Objekts in einer Client/Server-Anwendung vom Server zum Client schicken. Die Kommunikation erfolgt über IdHTTpServer (im Server) und IdHTTP (im Client). Die Daten !müssen! als String übertragen werden. Ich möchte mir den Aufwand ersparen alle Eigenschaften einzeln in ein eigenes Format (z. B. XML, INI, etc.) zu kopieren (derzeit über 50 Properties, zu viel Tipparbeit...). Also wollte ich die Komponente in einen Memory-Stream speichern, diesen mit TIdEncoderMIME in einen MIME-String kodieren und in einem StringStream abspeichern. Will ich den StringStream nun in einen TMemo ausgeben, bleibt das Feld leer. Eine Fehlermeldung erscheint nicht. Was mache ich falsch? Hat jemand vllt. eine elegantere Lösung dafür? Wichtig ist nur, dass es so einfach wie möglich zum umsetzen ist (ich habe keine Zeit 2 Wochen an einen Serialiszer zu arbeiten...). Schon mal vielen Dank :-D Mein Test-Code:
Delphi-Quellcode:
Grüße,
type
tmyobject = class(TComponent) private F1: String; f2: Int64; published property prop1: String read f1 write F1; property prop2: Int64 read f2 write f2; end; ... ... procedure TForm7.Button1Click(Sender: TObject); var obj: tmyobject; source: TMemoryStream; dest: TStringStream; begin obj := tmyobject.Create(Self); obj.prop1 := 'Hallo, Welt!'; obj.prop2 := 42; source := TMemoryStream.Create; source.WriteComponent(obj); dest := TStringStream.Create; IdEncoderMIME1.Encode(source, dest); memo1.Lines.LoadFromStream(dest); end; Andreas |
AW: Objekt serialisieren
Für die Serialisierung benutzer ich meist open source Bibliotheken wie SuperObject oder OmniXML, diese können TPersistent nach JSON oder XML serialisieren (und zurück). Auch SimDesign NativeXML, das seit kurzem open source it, beherrscht dies.
|
AW: Objekt serialisieren
Zitat:
Delphi-Quellcode:
dest.Position := 0;
|
AW: Objekt serialisieren
Zitat:
Zitat:
|
AW: Objekt serialisieren
und wie sieht es mit dem hauseigenen RTTI aus?
Bernhard |
AW: Objekt serialisieren
Einfach mal einen Breakpunkt setzen und die Datenobjekte untersuchen?
Delphi-Quellcode:
{...}
source.WriteComponent(obj); dest := TStringStream.Create; source.Position := 0; // <- hier Breakpunkt und source untersuchen IdEncoderMIME1.Encode(source, dest); dest.Position := 0; // <- hier Breakpunkt und dest untersuchen memo1.Lines.LoadFromStream(dest); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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