Deserialize Dictionary

Dopo infiniti debug ad una applicazione infimissima in c# abbiamo finalmente trovato la soluzione, utilizzando il miglior debug e solution solver in commercio. E’ un prodotto assolutamente gratis e usabile da tutti, in pieno stile 2.0: si chiama Google.

Ringrazio subito Miha Markič e Brent Challis per la preziosa collaborazione, anche senza che io gli avessi detto niente. Devono essere dei veri e propri guru 🙂

 

Problema

[ad name=”postdx”]Non si riescie a deserializzare (da binario) un oggetto di tipo Dictionary, o meglio una classe che eredita un oggetto di tipo Dictionary<(Of <(TKey, TValue>. L’errore del compilatore (VS9 in ambiente .net 2.0) è:

{"Impossibile trovare il costruttore richiesto per deserializzare un oggetto di tipo '<Namespace>.<ClassName>'."}

 

Soluzione

L’oggetto Dictionary è serializzabile in quanto implementa l’interfaccia ISerializable. Al suo interno (classe base) è definito però un costruttore necessario alla deserializzazione:

protected Dictionary(SerializationInfo info, StreamingContext context);

E’ quindi necessario che nella nostra classe, che eredita Dictionary, quindi tutti i  suoi metodi ma non i suoi costruttori, implementare tale costruttore basato su classe base in questo modo:

public <ClassName>(SerializationInfo si, StreamingContext sc):base(si,sc){}

 

E il gioco è fatto! Grazie Franz per l’appoggio morale, e riprendi in mano il tuo blog che era eccezionale!

Loading Facebook Comments ...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *