AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Serialisierung von TCollection mit TXMLSerializer
Thema durchsuchen
Ansicht
Themen-Optionen

Serialisierung von TCollection mit TXMLSerializer

Ein Thema von Dawn87 · begonnen am 1. Jul 2009 · letzter Beitrag vom 13. Jul 2009
 
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Serialisierung von TCollection mit TXMLSerializer

  Alt 1. Jul 2009, 15:29
Hallo,

ich benutze den XMLSerializer von dragonsoft und hab nun leider damit ein Problem:

Ich habe von TCollection und TCollectionItem abgeleitete Klassen die ich serialisiere und als XML-Datei speicher. Das klappt soweit auch ganz gut:

Die Klassen:
Delphi-Quellcode:
type
  TStorageItem = class(TCollectionItem)
  private
    FText: String;
    function GetM_sText: string;
    procedure SetM_sText(Value: string);
  published
    property Text: String read GetM_sText write SetM_sText;
end;

type TStorage = class(TCollection)
  private
    function GetItem(Index: Integer): TStorageItem;
    procedure SetItem(Index: Integer; const Value: TStorageItem);

  public
    function Add: TStorageItem;
    function FindItemID(ID: Integer): TStorageItem;
    function Insert(Index: Integer): TStorageItem;
    property Items[Index: Integer]: TStorageItem read GetItem write SetItem;
end;
Die Routine zum Speichern:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  coTest: TStorage;
  coStore: TStorageItem;
begin
  coTest := TStorage.Create(TStorageItem);

  coStore := coTest.Add;
  coStore.Text := 'Test';

  coStore := coTest.Add;
  coStore.Text := 'Test2';

  coStore := coTest.Add;
  coStore.Text := 'Test3';

  with TXMLSerializer.Create(self) do
  begin
    XMLSettings.WellFormated := true;

    StorageOptions := [soIncludeObjectLinks, soSortProperties];
    SpecialClasses := [scTCollection];

    SaveObject(coTest, 'Test');

    SaveToFile('C:\test.xml');
  end;
end;
Nun probiere ich diese Collection wieder aus der XML auszulesen also zu deserialisieren:

Delphi-Quellcode:
var
  coTest: TStorage;
  coStore: TStorageItem;
  i: Integer;
begin
  coTest := TStorage.Create(TStorageItem);

  with TXMLSerializer.Create(self) do
  begin
    XMLSettings.WellFormated := true;

    SpecialClasses := [scTCollection];

    LoadFromFile('C:\test.xml');

    LoadObject(coTest, 'Test');
  end;

  ListBox1.Clear;

  for i := 0 to coTest.Count - 1 do
  begin
    ListBox1.AddItem(coTest.Items[i].Text, nil);
  end;
Das ganze Funktioniert nicht (coTest.Count ist immer 0). Ich habe mir den Quellcode der Deserialisierungsroutinen mal angeschaut und diese versucht per SetPropValue() die Count-Eigenschaft von meiner TStorage-Klasse zu manipulieren. Da diese aber Read-only ist, klappt das nicht.

Hat jemand eine Idee wie ich das Problem lösen könnte?

Grüße
  Mit Zitat antworten Zitat
 


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 22:25 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