Ich habe gerade etwas Verrücktes bemerkt, von dem ich annahm, dass es völlig unmöglich ist: beim Deserialisieren eines Objekts wird die DataContractSerializer ruft den Konstruktor nicht auf !
Nehmen Sie zum Beispiel diese Klasse:
[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 deserialisiere, wird der Haltepunkt nicht getroffen. Ich habe absolut keine Ahnung, wie das möglich ist, da dies der einzige Konstruktor für dieses Objekt ist!
Ich nahm an, dass vielleicht ein zusätzlicher Konstruktor vom Compiler erzeugt wurde, weil die DataContract
Attribut, aber ich konnte es durch Nachdenken nicht finden...
Also, was ich gerne wissen würde, ist dies: wie könnte eine Instanz meiner Klasse erstellt werden, ohne den Konstruktor aufgerufen wird?
HINWEIS: Ich weiß, dass ich die OnDeserializing
Attribut, um mein Objekt zu initialisieren, wenn die Deserialisierung beginnt, ist dies nicht das Thema meiner Frage.