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

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!

Se trovi questo articolo su un blog diverso da “blog.merlinox.com” si tratta probabilmente di una copia non autorizzata. L’indirizzo originale di questo articolo è: Deserialize Dictionary scritto da .

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>