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;
}


Kategorie: .NETC#