AGB  ·  Datenschutz  ·  Impressum  







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

OnDeserialized nur in Root-Klasse?

Ein Thema von OregonGhost · begonnen am 8. Apr 2006
Antwort Antwort
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#1

OnDeserialized nur in Root-Klasse?

  Alt 8. Apr 2006, 11:32
Moin,

ich arbeite zurzeit am Laden/Speichern einer relativ umfangreichen Objekthierarchie, und ich habe mich dafür entschieden, dies über die XML-Serialisierung ablaufen zu lassen. Größtenteils funktioniert das auch recht gut, aber es gibt einige Eigenschaften der Objekte, die nicht serialisiert werden können. Beispielsweise hat in der Hierarchie jedes Objekt eine Eigenschaft Parent, die auf sein Elternteil in der Hierarchie verweist. Würde ich diese Eigenschaft mit serialisieren lassen, hätte ich einen zirkulären Verweis und der XmlSerializer schmeißt eine Ausnahme. In .NET 2.0 hat Microsoft offenbar speziell für solche Fälle die Attribute OnDeserialized etc. eingeführt. Ich deklariere also eine Methode in der Basisklasse wie folgt:
Code:
[OnDeserialized]
internal virtual void OnDeserialized(StreamingContext context)
{
    foreach (ComponentElement element in Children) {
        element.Parent = this;
    }
}
Diese Klassen haben jedoch allesamt keinen eigenen XmlSerializer, sondern werden über eine andere Klasse eingebunden, in der eine Liste dieser Objekte enthalten ist. Dort gibt es ebenfalls eine OnDeserialized-Methode, die auch korrekt ausgeführt wird und für die obersten Objekte in der Hierarchie eine Eigenschaft setzt. Für alle anderen Klassen, die allesamt über ein XmlIncludeAttribute eingebunden sind, wird die OnDeserialized-Methode jedoch nie aufgerufen, egal wo und wie ich sie einfüge. Jetzt meine Frage: Habe ich da irgendetwas übersehen oder wird OnDeserialized wirklich nur in der Klasse aufgerufen, für die der XmlSerializer instanziiert wurde? Ist ja nicht so schlimm, dann muss eben in dieser Klasse die Hierarchie durchlaufen werden, um die Integrität zu sichern, aber die andere Möglichkeit fände ich schöner

[Edit]
Hmm, ich fürchte, ich habe die Frage umsonst gestellt... Eine Überprüfung hat nämlich ergeben, dass auch in der Root-Klasse die OnDeserialized-Methode nicht aufgerufen wurde und die Integrität an anderer Stelle gesichert wurde... Eine Suche nach weiteren Beispielen führt mich zu der Annahme, dass der XmlSerializer diese Methoden überhaupt nicht aufrufen kann, sondern dies nur bei der BinaryFormatter-Serialisierung der Fall ist. Schade drum, weil das sehr praktisch gewesen wäre, aber wohl nicht zu ändern.
[/Edit]
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  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 19:41 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