Ich habe gerade etwas verrücktes realisiert, was ich für absolut unmöglich gehalten habe: Beim Deserialisieren eines Objekts ruft der DataContractSerializer den Konstruktor nicht auf!DataContractSerializer ruft meinen Konstruktor nicht auf?
diese Klasse Nehmen wir zum Beispiel:
[DataContract]
public class Book
{
public Book()
{ // breakpoint here
}
[DataMember(Order = 0)]
public string Title { get; set; }
[DataMember(Order = 1)]
public string Author { get; set; }
[DataMember(Order = 2)]
public string Summary { get; set; }
}
Wenn ich ein Objekt dieser Klasse deserialisiert wird der Breakpoint nicht getroffen. Ich habe absolut keine Ahnung, wie es möglich ist, da es der einzige Konstruktor für dieses Objekt ist!
ich davon aus, dass vielleicht ein zusätzlicher Konstruktor vom Compiler aufgrund des DataContract
Attributs generiert wurde, aber ich kann es nicht durch Reflexion finden ...
Also, was ich weiß, möchte, ist dies: Wie könnte eine Instanz meiner Klasse erstellt werden, ohne dass der Konstruktor aufgerufen wird?
HINWEIS: Ich weiß, dass ich das OnDeserializing
Attribut verwenden kann, um mein Objekt zu initialisieren, wenn Deserialisierung beginnt, das ist nicht das Thema meiner Frage.
oder die "OnDeserialized", wenn das Objekt deserializing getan wird, um die fehlenden Felder auszufüllen. –
Diese Frage ist mir auch in den Sinn gekommen: http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-instantiate-objects-without-calling-a-constructor –