Mi sono appena reso conto di qualcosa di pazzesco, che presumo assolutamente impossibile: quando deserializzi un oggetto, il DataContractSerializer non chiama il costruttore!DataContractSerializer non chiama il mio costruttore?
Prendete questa classe, per esempio:
[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; }
}
Quando ho deserializzare un oggetto di quella classe, il punto di interruzione non viene colpito. Non ho assolutamente idea di come sia possibile, dal momento che è l'unico costruttore di questo oggetto!
ho pensato che forse un costruttore aggiuntivo è stato generato dal compilatore a causa dell'attributo DataContract
, ma non riuscivo a trovare attraverso la riflessione ...
Quindi, quello che vorrei sapere è questo: come si può creare un'istanza della mia classe senza che venga chiamato il costruttore ??
NOTA: so che posso utilizzare l'attributo OnDeserializing
per inizializzare il mio oggetto quando inizia la deserializzazione, questo non è l'argomento della mia domanda.
o "OnDeserialized", quando l'oggetto è deserializzato, per compilare i campi mancanti. –
Anche questa domanda mi è passata per la testa: http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-ststantiate-objects-withoutcalling-a-constructor –