Serializzazione - Listato3
a cura di Enrico Barillari (requisiti: conoscenza minima di .Net e C#)using System; using System.IO; using System.Xml; using System.Xml.Serialization; using System.Text; using System.Collections; namespace ebSerialization { /// <summary> /// Summary description for XmlSerializer. /// </summary> public class ebXmlSerializer { ///<summary> Variabile member: nome completo del file</summary> private string filePath = Directory.GetCurrentDirectory() + @"\PersonaXml.xml"; ///<summary> ///Metodo: Costruttore predefinito ///</summary> public ebXmlSerializer() { } ///<summary> ///Metodo: Serializza un oggetto in formato XML ///</summary> ///<param name="persona">Istanza diPersona da serializzare</param> public void Serialize(Persona persona) { XmlTextWriter writer = null; try { // Creo un flusso per l'operazione di scrittura dei dati su file writer = new XmlTextWriter(filePath, Encoding.UTF8); // write a readable file writer.Formatting = Formatting.Indented; writer.Indentation = 4; // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(Persona)); // e questo é tutto ciņ che serve per persistere i dati serializer.Serialize(writer, persona); } catch(Exception ex) { throw new ApplicationException("ebXmlSerializer.Serialize: " + ex.Message); } finally { // Chiudere sempre i flussi non appena possibile writer.Close(); } } ///<summary> ///Metodo: Deserializza una istanza di Persona da un file in formato XML ///</summary> public object Deserialize() { XmlTextReader reader = null; try { // Creo un flusso per l'operazione di lettura dei dati dal file reader = new XmlTextReader(filePath); // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(Persona)); // Collego l'istanza XmlSerializer al gestore dell'evento serializer.UnknownElement +=new XmlElementEventHandler(serializer_UnknownElement); // e questo é tutto ciņ che serve per leggere i dati dal formato XML return serializer.Deserialize(reader); } catch(FileNotFoundException) { throw new ApplicationException("File inesistente"); } finally { reader.Close(); } } ///<summary> ///Metodo: Gestore dell'evento UnknownElement ///</summary> private void serializer_UnknownElement(object sender, XmlElementEventArgs e) { Console.WriteLine("Unknown Element"); Console.WriteLine("\t" + e.Element.Name + " " + e.Element.InnerXml); Console.WriteLine("\t LineNumber: " + e.LineNumber); Console.WriteLine("\t LinePosition: " + e.LinePosition); Persona x = (Persona) e.ObjectBeingDeserialized; Console.WriteLine (x.Nome + " " + x.Cognome); Console.WriteLine (sender.ToString()); } ///<summary> ///Metodo: Serializza un array in formato XML ///</summary> ///<param name="persona">Istanza di Persona da serializzare</param> public void SerializeArray(Persona[] persona) { XmlTextWriter writer = null; try { // Creo un flusso per l'operazione di scrittura dei dati su file writer = new XmlTextWriter(filePath, Encoding.UTF8); // write a readable file writer.Formatting = Formatting.Indented; writer.Indentation = 4; // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(Persona[])); // e questo é tutto ciņ che serve per persistere i dati serializer.Serialize(writer, persona); } catch(Exception ex) { throw new ApplicationException("ebXmlSerializer.SerializeArray: " + ex.Message); } finally { // Chiudere sempre i flussi non appena possibile writer.Close(); } } ///<summary> ///Metodo: Deserializza una istanza di Persona da un file in formato XML ///</summary> public Persona[] DeserializeArray() { XmlTextReader reader = null; try { // Creo un flusso per l'operazione di lettura dei dati dal file reader = new XmlTextReader(filePath); // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(Persona[])); // Collego l'istanza XmlSerializer al gestore dell'evento serializer.UnknownElement +=new XmlElementEventHandler(serializer_UnknownElement); // e questo č tutto ciņ che serve per leggere i dati dal formato XML return (Persona[])serializer.Deserialize(reader); } catch(FileNotFoundException) { throw new ApplicationException("File inesistente"); } finally { reader.Close(); } } ///<summary> ///Metodo: Serializza un array in formato XML ///</summary> ///<param name="persona">Istanza di Persona da serializzare</param> public void SerializeArrayList(ArrayList persona) { XmlTextWriter writer = null; try { // Creo un flusso per l'operazione di scrittura dei dati su file writer = new XmlTextWriter(filePath, Encoding.UTF8); // write a readable file writer.Formatting = Formatting.Indented; writer.Indentation = 4; // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(ArrayList),new Type[]{typeof(Persona)}); // e questo é tutto ciņ che serve per persistere i dati serializer.Serialize(writer, persona); } catch(Exception ex) { throw new ApplicationException("ebXmlSerializer.SerializeArray: " + ex.Message); } finally { // Chiudere sempre i flussi non appena possibile writer.Close(); } } ///<summary> ///Metodo: Deserializza una istanza di Persona da un file in formato XML ///</summary> public ArrayList DeserializeArrayList() { XmlTextReader reader = null; try { // Creo un flusso per l'operazione di lettura dei dati dal file reader = new XmlTextReader(filePath); // Occorre un'istanza della classe XmlSerializer XmlSerializer serializer = new XmlSerializer(typeof(ArrayList),new Type[]{typeof(Persona)}); // Collego l'istanza XmlSerializer al gestore dell'evento serializer.UnknownElement +=new XmlElementEventHandler(serializer_UnknownElement); // e questo é tutto ciņ che serve per leggere i dati dal formato XML return (ArrayList)serializer.Deserialize(reader); } catch(FileNotFoundException) { throw new ApplicationException("File inesistente"); } finally { reader.Close(); } } } }