Rossi Marco [rossimarko]


Blog personale dedicato allo sviluppo software
Archivio Posts
Anno 2009

Anno 2008

Generics e Serializzazione

Mi capita spesso di utilizzare la serializzazione per persistere dei dati su file xml.

Di solito utilizzo una classe che implementa due metodi di serializzazione e deserializzazione per evitare passaggi ripetitivi.

Il primo è abbastanza banale:

/// <summary>
///
Serializza una classe su file
///
</summary>

public static void XmlSerialize(string FileName, object obj)
{
    XmlSerializer dser = new XmlSerializer(obj.GetType());

    using (TextWriter stream = new StreamWriter(FileName))
    {
        dser.Serialize(stream, obj);
    }

}

La cosa che invece vorrei sottoporre alla vostra attenzione è la procedura di deserializzazione, in cui ho utilizzato i generics per definire il tipo di oggetto da deserializzare.

/// <summary>
///
Deserializza un file
///
</summary>

public static T XmlDeserialize<T>(string FilePath)
{

    if (!File.Exists(FilePath))
    {

        throw new FileNotFoundException("File da deserializzare non trovato", FilePath);
    }

    //Serializer
    XmlSerializer
dser = new XmlSerializer(typeof(T));

    using (TextReader sr = new StreamReader(FilePath))
    {

        //Deserializza

        return (T)dser.Deserialize(sr);

    }

}

Così facendo quando voglio richiamare il metodo mi basterà scrivere:
ClasseProva objProva = Serialization.XmlDeserialize<ClasseProva>(@"d:\prova.xml");

mentre se non avessi sfruttato i generics l'unica alternativa sarebbe stata passare il tipo dell'oggetto come parametro:
public static object XmlDeserialize(string FilePath, Type t)

per poi richiamarlo così: 
ClasseProva objProva = (ClasseProva) Serialization.XmlDeserialize(@"d:\prova.xml", typeof(ClasseProva));


Non so voi, ma io ritengo che dal punto di vista "stilistico" la soluzione fatta con i generics sia decisamente migliore.

Categoria: .NET
lunedì, 09 giu 2008 Ore. 00.41
Statistiche
  • Views Home Page: 64.691
  • Views Posts: 106.514
  • Views Gallerie: 0
  • n° Posts: 74
  • n° Commenti: 23

***

***


***


Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003