Partiamo da un oggetto di esempio Note

C#

[Serializable]
using System.Xml.Serialization;

    [XmlRoot ("MyNote")]
    public class Note
    {
        //costruttore senza parametri
        //richiesto dalla serializzazione
        public Note()
        {
        }

        //le proprietà private non vengono salvate
        private string _title;
        [XmlAttribute]
        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }

        private string  _body;
        //di defaul le proprietà pubbliche vengono salvate
        public string  Body
        {
            get { return _body; }
            set { _body = value; }
        }

        private int _version;
        //questa proprietà non viene salvata
        [XmlIgnore]
        public int Version
        {
            get { return _version; }
            set { _version = value; }
        }
    }
che dovrà essere decorato con gli attributi Serializable, XmlRoot, XmlAttribute e/o XmlIgnore.

Possiamo usare i metodi C# per serializzare e deserializzare su Stream (FileStream in questo caso):

C#

Note note = new Note();
private const string FILENAME = "note.xml";

private void Deserialize()
{
    if (File.Exists(FILENAME) == true)
    {
         System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Note));
         using (Stream strm = File.Open(FILENAME, FileMode.Open))
         {
            if (strm.Length > 0)
            {
               try
              {
                 //valorizzo l'oggetto con le proprietà lette dal file
                 note = (Note)xs.Deserialize(strm);
              }
              catch (System.Xml.XmlException ex)
              {
                 MessageBox.Show(ex.Message);
               }
               catch (System.InvalidOperationException ex)
              {
                 MessageBox.Show(ex.Message);
               }
           }
        }
    }
}

private void Serialize()
{
  System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(Note));
  using (Stream strm = File.Open(FILENAME, FileMode.Create, FileAccess.Write))
  {
    xs.Serialize(strm, note);
    txtVersion.Text = note.Version.ToString();
  }
}
Vengono serializzati in XML solo le classi e i metodi pubblici ed inoltre la classe deve avere un costruttore senza parametri.
Tags:
C#236 Esempi225 XML / XSL / XSLT29
Potrebbe interessarti anche: