Serializzare un oggetto in XML con C#
Partiamo da un oggetto di esempio Note
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#
[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; }
}
}
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.