AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt serialisieren

Ein Thema von Andreas L. · begonnen am 27. Jul 2010 · letzter Beitrag vom 27. Jul 2010
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

Objekt serialisieren

  Alt 27. Jul 2010, 12:30
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

Mein Test-Code:
Delphi-Quellcode:
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;
Grüße,
Andreas
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Objekt serialisieren

  Alt 27. Jul 2010, 13:12
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.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Objekt serialisieren

  Alt 27. Jul 2010, 14:12
Will ich den StringStream nun in einen TMemo ausgeben, bleibt das Feld leer.
Vielleicht noch die Position im Stream auf Anfang setzen...
dest.Position := 0;
Andreas
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

AW: Objekt serialisieren

  Alt 27. Jul 2010, 14:39
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.
Werde mir die Bibliotheken mal anschauen. Danke für die Links.

Will ich den StringStream nun in einen TMemo ausgeben, bleibt das Feld leer.
Vielleicht noch die Position im Stream auf Anfang setzen...
dest.Position := 0;
Bringt leider auch nichts
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Objekt serialisieren

  Alt 27. Jul 2010, 15:01
und wie sieht es mit dem hauseigenen RTTI aus?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#6

AW: Objekt serialisieren

  Alt 27. Jul 2010, 15:51
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);
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 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