Как вы узнаете, когда вы были загружены через сериализацию 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;
}
}