Bei der Deserialisierung von WCF ist etwas Magisches im Gange. Wie instanziiert es eine Instanz des Datenvertragstyps, ohne seinen Konstruktor aufzurufen?
Betrachten Sie beispielsweise diesen Datenvertrag:
[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
}
Wenn Sie eine Instanz dieses Objekts über erhalten, sehen DataContractSerializer
Sie, dass das Feld _wasConstructorCalled
ist false
.
Wie macht WCF das? Ist dies eine Technik, die auch andere anwenden können, oder ist sie uns verborgen?
quelle
Ja, FormatterServices.GetUninitializedObject () ist die Quelle der Magie.
Wenn Sie eine spezielle Initialisierung durchführen möchten, lesen Sie diese Informationen. http://blogs.msdn.com/drnick/archive/2007/11/19/serialization-and-types.aspx
quelle
[OnDeserialized]
war die Lösung für mich!