Come indica MSDN here, è possibile. Ma ho passato 2 ore a scavare codice mscorlib, perché in alcuni casi il BinaryFormatter ha chiamato il mio metodo contrassegnato con il costruttore di deserializzazione PRIMA di OnDeserialized. Cioè, l'ordine eraÈ possibile utilizzare OnDeserializedAttribute anziché l'interfaccia IDeserializationCallback?
OnDeserializing(StreamingContext context)
OnDeserialized(StreamingContext context)
.ctor(SerializationInfo info, StreamingContext context)
Mentre mi aspettavo che fosse
OnDeserializing(StreamingContext context)
.ctor(SerializationInfo info, StreamingContext context)
OnDeserialized(StreamingContext context)
E il punto finale. Quando ho implementato l'interfaccia IDeserializationCallback, il suo metodo OnDeserialization è stato chiamato AFTER costruttore, come volevo e mi aspettavo.
Ho cercato di riprodurlo su una semplice struttura di classe, ma lì tutto ha funzionato bene. Nel nostro progetto il grafico degli oggetti che viene serializzato è molto complesso, quindi non so dove scavare. Ispezionare il codice mscorlib con il riflettore non è stato di grande aiuto - il codice di deserializzazione è troppo complicato per me per capire da dove viene il problema.
Quindi, qualcuno sa che cosa potrebbe causare questo problema? Usiamo il presupposto che OnDeserialized è chiamato PRIMA del costruttore in molti altri posti quindi sono spaventato ora che non è molto affidabile ...
Grazie!