E' una FAQ? E' un tip? E' un pattern? Ai "poster" l'ardua sentenza (però risolve un problema)

Sicuramente molti di noi hanno giocato e tratto profitto dal supporto alla serializzazione offerto dal framework .NET; oggi, però, mi sono imbattuto in un caso interessante. Dovevo, infatti, estendere la classe Hashtable (che di per sè è già serializzabile), e rendere la mia classe serializzabile. Ora, poichè l'attributo Serializable non viene ereditato (per ottimi motivi, direi...) ho semplicemente decorato anche la mia classe con tale attributo:

[Serializable]
public class ExtendedHashtable : System.Collections.Hashtable
{
    [NonSerialized]
    private CampoDocumento campoDocumento=null;

    public Hashtable(CampoDocumento campoTarget) : base()
    {
        this.campoDocumento=campoTarget;
    }
  
    //Varie proprietà e metodi
}

Come mi aspettavo, la classe ExtendedHashtable è risultata serializzabile senza alcun problema, ma... Ogni tentativo di deserializzazione generava una eccezione contraddistina dal messaggio: "The constructor to deserialize an object of type ExtendedHashtable was not found.". Perchè? Perchè la classe base (Hastable), per quanto serializzabile, lo è mediante un meccanismo "custom", ossia implementa l'interfaccia ISerializable. Questo significa che si aspetta di poter utilizzare, in fase di deserializzazione, un apposito costruttore, la cui firma è:

public Hashtable(SerializationInfo info, StreamingContext context);

In pratica, per risolvere il nostro "problema" basterà aggiungere alla nostra classe questo costruttore e richiamare quello corrispondente nella classe base:

[Serializable]
public class ExtendedHashtable : System.Collections.Hashtable
{
    [NonSerialized]
    private CampoDocumento campoDocumento=null;

    public Hashtable(SerializationInfo info, StreamingContext context) : base(info, context)
    {
    }

    public Hashtable(CampoDocumento campoTarget) : base()
    {
        this.campoDocumento=campoTarget;
    }

    //Varie proprietà e metodi
}

Come diceva la pubblicità? "Basta poco, che c'è vo'!"... :-D

posted @ venerdì 24 ottobre 2003 15:46

Print

Comments on this entry:

No comments posted yet.

Your comment:



 (will not be displayed)


 
 
Please add 8 and 2 and type the answer here:
 

Live Comment Preview:

 
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011