DataContractSerializer ruft meinen Konstruktor nicht auf?

Mir ist gerade etwas Verrücktes aufgefallen, was ich für völlig unmöglich hielt: Beim Deserialisieren eines Objekts, derDataContractSerializer ruft den Konstruktor nicht auf !

Nehmen Sie diese Klasse 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 deserialisiere, wird der Haltepunkt nicht erreicht. Ich habe absolut keine Ahnung, wie das möglich ist, da es der einzige Konstruktor für dieses Objekt ist!

Ich bin davon ausgegangen, dass der Compiler wegen des vielleicht einen zusätzlichen Konstruktor generiert hatDataContract Attribut, aber ich konnte es nicht durch Nachdenken finden ...

Was ich also wissen möchte, ist Folgendes: Wie kann eine Instanz meiner Klasse erstellt werden, ohne dass der Konstruktor aufgerufen wird?

HINWEIS: Ich weiß, dass ich das verwenden kannOnDeserializing Das Attribut, mein Objekt zu initialisieren, wenn die Deserialisierung beginnt, ist nicht Gegenstand meiner Frage.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage