12

Jul

MCTS 70-516: Accesso ai dati tramite .NET 4! Parte 2

Eccoci qui con un’altra lezione!

Questa volta parleremo di come possiamo serializzare e deserializzare gli oggetti data table e dataset in file binari o XML e viceversa.

L’oggetto DataTable espone un metodo chiamato WriteXML. Questo metodo viene utilizzato per creare un file xml contenente i nostri dati. La sintassi è molto semplice:


dt.WriteXml(“percorso_file_xml.xml”);

 

Per modificare il tipo di conversione delle colonne del nostro DataTable dobbiamo agire sulla proprietà ColumnMapping. I possibili valori sono inclusi nell’enumeratore  MappingType e sono:

Attribute: Il valore della colonna è posizionato come un attributo XML.
Element: Default. Il valore della colonna è posizionato come  un elementoXML .
Hidden: La colonna non viene inviata al file XML.
SimpleContent: I dati della colonna vengono memorizzati come testo all'interno dei tag elemento.

 

In questo modo stiamo però trasformando solo i dati in xml. Questo implica che tutti i dati vengono convertiti in campo string! Potrebbe rilevarsi un bel problema! Per evitare questo disagio dobbiamo convertire anche lo schema del nostro DataTable. Per fare ciò basta aggiungere al metodo in oggetto il parametro XmlWriteMode.WriteSchema:

dt.WriteXml(“percorso_file_xml.xml”, XmlWriteMode.WriteSchema);

in questo modo, viene creato nella prima parte del nostro xml generato, tutto il codice necessario per poter ricreare in un secondo momento il nostro datatable con tutte le proprietà invariate.

La parte di serializzazione è finita, in pochi semplici passi possiamo creare un file XML con i nostri dati e poterli utilizzare in un’altra applicazione. A questo punto vediamo come deserializzare il nostro file XML, per farlo basta soltanto queste due righe di codice ed il gioco è fatto:

DataTable xmlTable = new DataTable();
xmlTable.ReadXml(“percorso_file_xml.xml”);

 

Per i DataSet è praticamente identico:

ds.WriteXml(“percorso_file_xml.xml”, XmlWriteMode.WriteSchema);

Un problema che potrebbe sorgere, è che il nostro file XML diventi troppo grande nell’includere anche lo schema. L’oggetto DataSet espone un metodo WriteXmlSchema che vi permette di creare un file .xsd contenete solo lo schema! Proprio come il DataTable, per recuperare il nostro DataSet si utilizzano i metodi ReadXmlSchema(passando la path del file .xsd) e ReadXML.

Un altro modo per poter ridurre le dimensioni del file generato è di creare un file binario. Quindi è consigliabile, se l’XML non è richiesto per forza, di utilizzare questa tecnica per poter recuperare spazio e soprattutto aumentare la velocità di trasferimento del file in questione. Il seguente codice crea  un file binario:

using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
...
FileStream fs = new FileStream(
"c:\DataSetBinaryFile.bin",FileMode.Create);
BinaryFormatter fmt = new BinaryFormatter();
fmt.Serialize(fs, ds);
fs.Close( );

 

Analizzando il file prodotto, notiamo che comunque è stato generato un file xml e poi incluso in un file binario! Per poter eliminare definitivamente l’xml e quindi recuperare effettivamente spazio bisogna impostare la proprietà RemotinFormat:

ds.RemotingFormat = SerializationFormat.Binary;

adesso il nostro file binario sarà molto più leggero (P.s: per i file di piccole dimensioni questa compressione non si noterà molto).

Per deserializzare un file binario ed ottenere il nostro DataSet si usa:

DataSet vendorData;
FileStream fs = new FileStream(
"c:\DataSetBinaryFile.bin"), FileMode.Open);
BinaryFormatter fmt = new BinaryFormatter();
vendorData = (DataSet)fmt.Deserialize(fs);
fs.Close();

Con questo chiudiamo la nostra seconda lezione.

Buono studio a tutti.

A preso

Carmine Punella

by Carmine Punella on 7/12/2011
Post archive