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

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

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

 
   
     123 Any Street
     
       
         
       
     
   
   
     456 High Street
     
       
         
       
     
   
 

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

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

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

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 = @"
                    
                        123 Any Street
                        
                            
                                
                            
                        
                    ";

        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)

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