W ramach platformy .NET mamy idealny serializator obiektów do pliku XML.
Dla przykładowych struktur danych:
public class MyObject
{
public MyObject()
{
}
public string Name { get; set; }
[XmlAttribute("id")]
public int Value { get; set; }
}
public class MyContainer
{
public MyContainer()
{
Items = new List<MyObject>();
}
public List<MyObject> Items { get; set; }
}
plik XML może wyglądać następująco:
<?xml version="1.0"?>
<MyContainer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Items>
<MyObject id="123">
<Name>obiekt 1</Name>
</MyObject>
<MyObject id="456">
<Name>obiekt 2</Name>
</MyObject>
</Items>
</MyContainer>
Jak to zrobić? Bardzo prosto! Przy użyciu klasy XmlSerializer:
static void Main(string[] args)
{
MyContainer mc = new MyContainer();
mc.Items.Add(new MyObject() { Name = "obiekt 1", Value = 123 });
mc.Items.Add(new MyObject() { Name = "obiekt 2", Value = 456 });
SerializeXml("mycontainer.xml", typeof(MyContainer), mc);
MyContainer mcr =
(MyContainer)DeserializeXml("mycontainer.xml",
typeof(MyContainer));
}
static void SerializeXml(string file, Type type, object o)
{
FileStream fs = File.Create(file);
XmlSerializer xs = new XmlSerializer(type);
xs.Serialize(fs, o);
fs.Close();
}
static object DeserializeXml(string file, Type type)
{
FileStream fs = File.Open(file, FileMode.Open);
XmlSerializer xs = new XmlSerializer(type);
var result = xs.Deserialize(fs);
return result;
}