Как вы узнаете, когда вы были загружены через сериализацию XML?

Я пытаюсь загрузить дерево объектов с помощью XML-сериализации, и в данный момент он загружает объекты и довольно успешно создает дерево. Моя проблема вращается вокруг факта, что эти классы поддерживают уровень аудита. Я хотел бы иметь возможность вызывать какой-либо метод для каждого объекта после его полной загрузки.

Ради аргумента предположим, что у меня есть довольно универсальное дерево объектов с разными классами на разных уровнях, например:

 <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>

Есть ли способ использовать сериализаторы по умолчанию (Подобным образом, вы можете создавать такие методы, какShouldSerializeFoo) определить, когда загрузка закончилась для каждого объекта?

Edit: Я должен отметить, что очевидный случай разоблачения чего-то похожего наOnLoaded() метод, который яcould вызов после десериализации показался мне "плохим делом".

Edit2: Ради обсуждения это мой нынешнийhack «подход», который работает для базового уровня, но дочерний узел Сити по-прежнему считает, что его необходимо сохранить с изменениями (в реальном мире объектная модель намного сложнее, но по крайней мере она будет компилироваться без необходимости для полного источника)

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;
    }
}

Ответы на вопрос(9)

Ваш ответ на вопрос