Comment savoir quand vous avez été chargé via XML Serialization?

Je suis en train de charger un arbre d'objets à l'aide de la sérialisation XML, et au moment où il va charger les objets, et la création de l'arbre tout à fait heureux. Ma question tourne autour du fait que ces classes de soutenir un niveau de vérification. Ce que j'aimerais être capable de faire est d'appeler une méthode sur chaque objet après qu'il a fini d'être chargé.

Pour les besoins de la discussion, supposons que j'ai une assez générique arbre d'objets de différentes classes à différents niveaux, tels que:

 <Customer name="Foo Bar Inc.">
   <Office IsHq="True">
     <Street>123 Any Street</Street>
     <Town name="Anytown">
       <State name="Anystate">
         <Country name="My Country" />
       </State>
     </Town>
   </Office>
   <Office IsHq="False">
     <Street>456 High Street</Street>
     <Town name="Anycity">
       <State name="Anystate">
         <Country name="My Country" />
       </State>
     </Town>
   </Office>
 </Customer>

Est-il de toute façon à l'aide de la valeur par défaut serialisers (De la même façon que vous pouvez créer des méthodes comme ShouldSerializeFoo) pour déterminer quand le chargement est fini pour chaque objet?

Edit:
Je tiens à souligner que le cas évident d'exposer quelque chose de semblable à un OnLoaded() méthode que je pourrait appel après deserialising, me frappe comme étant une "mauvaise chose à faire".

Edit2:
Pour l'amour de la discussion, ce est mon hack "approche", qui travaille pour le niveau de base, mais l'enfant de la Ville nœud considère toujours qu'il doit être enregistré avec les changements dans le monde réel, le modèle d'objet est beaucoup plus complexe, mais cela permettra au moins de la compilation, sans la nécessité pour la totalité du code source)

public class Office
{
    [XmlAttribute("IsHq")]
    public bool IsHeadquarters { get; set; }

    [XmlElement]
    public string Street { get; set; }

    [XmlElement]
    public Town Town { get; set; }

    protected virtual void OnLoaded() {}

    public static OfficeCollection Search()
    {
        OfficeCollection retval = new OfficeCollection();
        string xmlString = @"
                    <Office IsHq='True'>
                        <Street>123 Any Street</Street>
                        <Town name='Anytown'>
                            <State name='Anystate'>
                                <Country name='My Country' />
                            </State>
                        </Town>
                    </Office>";

        XmlSerializer xs = new XmlSerializer(retval.GetType());
        XmlReader xr = new XmlTextReader(xmlString);
        retval = (OfficeCollection)xs.Deserialize(xr);

        foreach (Office thisOffice in retval)
        {
            thisOffice.OnLoaded();
        }
        return retval;
    }
}

source d'informationauteur Rowland Shaw