Me acabo de dar cuenta de algo loco, que asumí que era completamente imposible: al deserializar un objeto, el DataContractSerializer no llama al constructor!¿DataContractSerializer no llama a mi constructor?
tomar 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 deserializar un objeto de esa clase, el punto de interrupción no se ve afectado. No tengo ni idea de cómo es posible, ya que es el único constructor de este objeto.
supuse que tal vez un constructor adicional fue generada por el compilador a causa del atributo DataContract
, pero no pude encontrar a través de la reflexión ...
Por lo tanto, lo que me gustaría saber es lo siguiente: ¿cómo podría crearse una instancia de mi clase sin llamar al constructor?
NOTA: Sé que puedo utilizar el atributo OnDeserializing
para inicializar mi objeto cuando comienza la deserialización, este no es el tema de mi pregunta.
o el "OnDeserialized", cuando el objeto está deserializado, para completar los campos faltantes. –
Esta pregunta cruzó por mi mente también: http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-instantiate-objects-without-calling-a-constructor –