Blog Stats
  • Posts - 16
  • Articles - 0
  • Comments - 123
  • Trackbacks - 31

 

[70-553] – 1. Section 1 – 3 Implementing serialization – 2 – Control Xml Serialization

Gioco  un po’ quello che c’e’ in System.Xml.Serialization, anche perchè in TV non c’e’ (al solito) nulla di umano da vedere... ed il resto (saggio) della famiglia dorme.

 

La classe per serializzare è XmlSerializer, che si avvale di una bella dose di attributi sulle proprietà delle classi , es.

XmlRootAttribute : elemento radice dell’oggetto

XmlElementAttribute = elemento xml classico

XmlAttributeAttribute= elemento di tipo attributo

E i suoi amici.. XmlTextAttribute, XmlTypeAttribute, XmlEnumAttribute.., XmlArray

(ci sono anche per soap e si chiamano SoapAttributeAttribute, SoapEnumAttribute....).

   [XmlRootAttribute("IlMioOggetto", Namespace = "http://www.bruna.com", IsNullable = false)]

    public class mioOggetto2

    {

        [XmlAttributeAttribute]

        public string id;

        [XmlElementAttribute( IsNullable = false, DataType="string"  )]

        public  string nome;       //se sono private non si serializzano       

        [XmlElementAttribute] //è cmq il default

        public string cognome;

        [XmlElementAttribute(ElementName="Eta", DataType="int")]

        public int eta;

        [XmlArray]

        public List<string> nipotini;

 

        public mioOggetto2()

        {

            // questo è necessario perchè altrimenti XmlSerializer si rifiuto di inizializarsi

        }

        public mioOggetto2(string n, string c, int e)

        {

            id = System.Guid.NewGuid().ToString();

            nome = n;

            nipotini = new List<string>();

            eta = e;

        }

        public  void addNipote(string nome) { nipotini.Add(nome); }

 }

 

E si utilizza in un bel xmlSerializer

        static void Main(string[] args)

        {

            mioOggetto2 obj1 = new mioOggetto2("Donald", "Duck");

            obj1.addNipote("Qui"); obj1.addNipote("Quo"); obj1.addNipote("Qua");

               

            XmlSerializer ser = new XmlSerializer(typeof(mioOggetto2));

            TextWriter txtW = new StreamWriter("c:\\temp\\serialize1.xml");

            ser.Serialize(txtW, obj1);

            txtW.Close();               

        }

Ed il risultato è:

<?xml version="1.0" encoding="utf-8" ?>

- <IlMioOggetto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" id="43e35b0b-e94f-47f7-a2eb-9e4db3c682e1" xmlns="http://www.bruna.com">

  <nome>Donald</nome>

  <Eta>0</Eta>

- <nipotini>

  <string>Qui</string>

  <string>Quo</string>

  <string>Qua</string>

  </nipotini>

  </IlMioOggetto>

 

 

E per rileggere? Nel main:

 

            XmlSerializer ser2 = new XmlSerializer(typeof(mioOggetto2));

            TextReader txtR = new StreamReader("c:\\temp\\serialize1.xml");

            mioOggetto2 m = (mioOggetto2) ser2.Deserialize(txtR);

 

E avro’ tutto a posto..

Un esempio molto bello,  c’e’ nell’MSDN  in c++ , nella classe XmlSerializer.

 

Comments have been closed on this topic.
 

 

Copyright © Bruna Gavioli