¿DataContractSerializer no llama a mi constructor?

Acabo de darme cuenta de algo loco, que asumí que era completamente imposible: al deserializar un objeto, elDataContractSerializer no llama al constructor !

Tome esta clase, por ejemplo:

[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; }
}

Cuando deserializo un objeto de esa clase, el punto de interrupción no se alcanza. No tengo la menor idea de cómo es posible, ya que es el único constructor para este objeto.

Supuse que tal vez un compilador adicional fue generado por el compilador debido a laDataContract atributo, pero no pude encontrarlo a través de la reflexión ...

Entonces, lo que me gustaría saber es esto: ¿cómo podría crearse una instancia de mi clase sin que se llame al constructor?

NOTA: Sé que puedo usar elOnDeserializing atributo para inicializar mi objeto cuando comienza la deserialización, este no es el tema de mi pregunta.

Respuestas a la pregunta(2)

Su respuesta a la pregunta