Serializzazione e Deserializzazione

Lavorando ad un progetto che utilizza BizTalk mi sono trovato spesso a lavorare con messaggi XML ed ho avuto quindi la necessità di effettuare serializzazione e deserializzazione dei messaggi direttamente in memoria senza passare per file XML.

Per quanto riguarda la deserializzazione è abbastanza semplice visto che mi arriva il messaggio già all'interno di un XmlDocument è sufficiente utilizzare il metodo Deserialize della classe XmlSerializer:


private MyClass MyClassDeserialize(XmlDocument xmlMyClass)
{
        XmlSerializer serialize = new XmlSerializer(typeof(MyClass));
        XmlNodeReader nr = new XmlNodeReader(xmlMyClass);
        return (MyClass)serialize.Deserialize(nr);
}

Per la serializzazione il discorso è invece un po' più complesso in quanto la serializzazione deve avvenire in memoria così come la creazione dell'XmlDocument.
Ho pensato di effettuare la serializzazione della classe all'interno di un MemoryStream, copiare il contenuto del MemoryStream in un array di byte e trasformare questo array di byte in un Xml tramite il metodo GetString della classe ASCIIEncoding.
Sembra un po' macchinoso ma funziona correttamente e mantiene delle performance discrete.


private XmlDocument MyClassSerialize(MyClass myC)
{
        // istanzia il serializzatore
        XmlSerializer serialize = new XmlSerializer(typeof(MyClass));
        // istanzia l'xmldocument che verrà restituito
        XmlDocument xmlMyClass = new XmlDocument();
        // istanzia il memory-stream in cui deserializzare l'xml
        using( MemoryStream ms = new MemoryStream() )
       {
               // deserializza la classe all'interno del memory stream
               serialize.Serialize(ms, myC);
               ms.Position = 0;
               // instanzia un array di byte per copiare il contenuto del memorystream
               byte[] b = new byte[ms.Length];
               ms.Read(b, 0, (int)ms.Length);
        }
        // carica nel xmldocument il contenuto dell'array di byte
        xmlMyClass.LoadXml(Encoding.ASCII.GetString(b));

        return xmlMyClass;
}

Technorati Tags: ,

posted @ giovedì 4 agosto 2005 21:09

Print

Comments on this entry:

# re: Serializzazione e Deserializzazione

Left by Pingback/TrackBack at 05/08/2005 11:36
Gravatar
Grazie Andrea per i tuoi consigli, in particolare il primo che era una grave svista. Ho corretto il codice come da tue indicazioni. :-)

# re: Serializzazione e Deserializzazione

Left by Capo dei Capi del capo at 09/06/2008 00:47
Gravatar
io sono il capo!!... continua così!! basta che mi fai fare soldi!! :-p... no dai... a parte gli scherzi... grazie dell'aiuto... questo post mi è stato utile!!
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011