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
Antwort Antwort
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#1

Re: Serialisierung von TCollection mit TXMLSerializer

  Alt 13. Jul 2009, 14:10
Dawn87 und ich hatten nun noch ein Problem, was passiert wenn man in einem TCollectionItem eine weitere TCollection einbindet, klar der Serializer wird diese nicht laden, da die Collection niemals erstellt wurde.

Um das Problem zu lösen habe ich ein neues Event erstellt und rufe dies auf, bevor die Klasse geladen wird:
Delphi-Quellcode:
            //[...]
            if ANSISameText(lPropNode.Attributes['type'], 'Object') then
            begin
              lPropObj := TPersistent(GetObjectProp(aPropertyInstance, lPropName));
              if Assigned(lPropObj) then
                  LoadClass(lPropNode, lPropObj, lPropName)
               { --------------------------- }
                else
                if ANSISameText(lPropNode.Attributes['class'],'TCollection') then
                begin
                  fOnSpecialClassLoad(self,lPropName,lPropObj);
                  if not Assigned(lPropObj) then
                    raise Exception.Create('Object of '+ lPropName +' is undefined');
                  SetObjectProp(aPropertyInstance,lPropName,lPropObj);
                  LoadClass(lPropNode, lPropObj, lPropName);
                end;
               { --------------------------- }
//[...]
Der Benutzer muss "nur" noch die TCollection's erstellen:
Delphi-Quellcode:
procedure TSettingsManager.SpecialClassLoad(aSender: TObject; aObjectName: string; var aObject: TPersistent);
begin
  if aObjectName = 'Conditionsthen
      aObject := TCollection.Create(TConditionsCollectionItem)
    else
      if aObjectName = 'SubConditionsthen
        aObject := TCollection.Create(TSubConditionsCollectionItem)
end;
Delphi-Quellcode:
type
  TMyCollectionItem = class(TCollectionItem)
    private
      FConditions:TCollection;
    published
      property Conditions:TCollection read FConditions write FConditions;
  end;

  TConditionsCollectionItem = class(TCollectionItem)
    private
      FSubConditions:TCollection;
    published
      property SubConditions:TCollection read FSubConditions write FSubConditions;
  end;
Man könnte das ganze theoretisch auch mit dem Event "OnStartObjectLoad" durchführen dieses benötigt dann aber wieder eine eingebundene xml Unit.
Angehängte Dateien
Dateityp: pas uxmlserializer_107.pas (52,2 KB, 24x aufgerufen)
Sebastian
  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 11:01 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 by Thomas Breitkreuz