Как я могу запускать код в определении класса C # каждый раз, когда любой экземпляр класса десериализуется? - PullRequest
6 голосов
/ 26 апреля 2010

Я пытаюсь получить класс из ObservableCollection, и мне нужно запускать только одну строку кода каждый раз, когда любой экземпляр этого класса десериализован. Я думал сделать это:

[Serializable]
public class ObservableCollection2<T> : ObservableCollection<T>, ISerializable
{
    public ObservableCollection2()
        : base()
    { }

    public ObservableCollection2(SerializationInfo info, StreamingContext context)
        : base(info, context)
    {
        // Put additional code here.
    }

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
    {
        base.GetObjectData(info, context);
    }
}

Но у меня нет доступа к базовым методам, связанным с сериализацией. Я вынужден переписать всю сериализацию вручную?

1 Ответ

15 голосов
/ 26 апреля 2010

Можно использовать OnDeserializedAttribute: «При применении к методу указывает, что метод вызывается сразу после десериализации объекта». Обратите внимание, что метод также должен принимать параметр StreamingContext:

[Serializable]
public class ObservableCollection2<T>: ObservableCollection<T>
{
    [OnDeserialized()]
    internal void OnDeserializedMethod(StreamingContext context)
    {
        this.DateDeserialized = DateTime.Now;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...