IDeserializationCallback vs OnDeserializedAttribute

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

IDeserializationCallback:

[Serializable]
public class Foo : IDeserializationCallback
{
    public void OnDeserialization(object sender)
    {
         // initialize unserialized fields etc.
    }
}

OnDeserialized событие:

[Serializable]
public class Foo
{
    [OnDeserialized]
    public void OnDeserialized(StreamingContext context)
    {
         // initialize unserialized fields etc.
    }
}

Есть ли какие-то конкретные плюсы / минусы или сценарии, в которых вы бы выбрали один из других?

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

мо. В большинстве случаев вам, вероятно, будет лучше обслуживать интерфейс.

Посмотрите здесь для некоторых объяснений:http://social.msdn.microsoft.com/Forums/en-US/netfxremoting/thread/311b2b57-6b0a-49ed-aa96-84f69d51da0f

Решение Вопроса

я могу лишь утверждать, что интерфейс имеет преимущество в том, что он заставляет вас реализовывать правильную сигнатуру метода, где-поскольку версия атрибута с радостью позволит вам скомпилировать ваш класс независимо от того, как выглядит сигнатура метода ,

 Maciej23 мар. 2011 г., 19:00
На самом деле это не правильный ответ - посмотрите на Вальответьте и перейдите по ссылке там.
 Erik Öjebo06 окт. 2009 г., 21:32
Хорошая точка зрения. Это довольно приятное преимущество использования интерфейса IDeserializationCallback.

DeserializationCallback.OnDeserialization "Запускается, когда весь граф объектов был десериализован. "(ссылка на сайт).

Однако событие OnDeserializedИспользуйте атрибут OnDeserializedAttribute, когда вам нужно исправить значения десериализованного объекта после того, как он был десериализован, и до того, как будет возвращен график. Этот атрибут можно использовать вместо интерфейса IDeserializationCallback. "(ссылка на сайт).

Поскольку атрибут OnDeserialized можно использовать для изменения графа объекта, он вызывается перед OnDeserialization (что означает, что граф объекта находится в своем конечном состоянии).

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