Podczas deserializacji WCF zachodzi pewna magia. W jaki sposób tworzy wystąpienie typu kontraktu danych bez wywoływania jego konstruktora?
Rozważmy na przykład ten kontrakt danych:
[DataContract]
public sealed class CreateMe
{
[DataMember] private readonly string _name;
[DataMember] private readonly int _age;
private readonly bool _wasConstructorCalled;
public CreateMe()
{
_wasConstructorCalled = true;
}
// ... other members here
}
Po uzyskaniu instancji tego obiektu za pośrednictwem DataContractSerializer
zobaczysz, że to pole _wasConstructorCalled
jest false
.
Jak więc to robi WCF? Czy jest to technika, której mogą używać inni, czy też jest ona przed nami ukryta?
źródło
Tak, źródłem magii jest FormatterServices.GetUninitializedObject ().
Jeśli chcesz wykonać jakąkolwiek specjalną inicjalizację, zobacz to. http://blogs.msdn.com/drnick/archive/2007/11/19/serialization-and-types.aspx
źródło
[OnDeserialized]
był dla mnie rozwiązaniem!