Xml-сериализация в C#
Захотелось написать немного про Xml-сериализацию в C#. Для начала сам пример. В примере не весь код, а только касающийся сериализации.
public class Account
{
// здесь вместо XmlElement можно XmlAttribute. Формат сохранения будет другой. Проверьте.
[XmlElement("id")] public int ID;
[XmlElement("owner")] public string Owner;
[XmlElement("saldo")] public decimal Saldo;
[XmlElement("cdate")] public DateTime CDate;
}
[XmlRoot("bank")]
public class Bank
{
// чтобы поля accounts и id_counter сохранялись при использовании xml-сериализации
// нужно чтобы они были публичными. Такое использование нарушает инкапсуляцию.
// Чтобы обойти такое нужно создать свойства класса (property), дублирующее содержимое
// этих полей, но при загрузке опять же через эти свойства будут устанавливаться сохраненные
// значения, то есть в любом случае нарушение скрытности полей.
[XmlArray("accounts")]
public List<Account> accounts;
[XmlElement("id-counter")]
public int id_counter = 1;
public Bank()
{
accounts = new List<Account>();
}
public void Save()
{
XmlSerializer s = new XmlSerializer( typeof( Bank ) );
TextWriter w = new StreamWriter("bank.xml");
s.Serialize( w, this );
w.Flush();
w.Close();
}
public static Bank Load()
{
Bank bank;
XmlSerializer s = new XmlSerializer( typeof( Bank ) );
TextReader r = new StreamReader("bank.xml");
bank = (Bank)s.Deserialize( r );
r.Close();
return bank;
}
}
Вот что получается при сохранении:
<?xml version="1.0" encoding="utf-8"?>
<bank xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<account>
<Account>
<id>1</id>
<owner>naugrim</owner>
<saldo>10</saldo>
<cdate>2009-12-03T00:38:54.07108+03:00</cdate>
</Account>
<Account>
<id>2</id>
<owner>test</owner>
<saldo>20</saldo>
<cdate>2009-12-03T00:38:57.541126+03:00</cdate>
</Account>
<Account>
<id>3</id>
<owner>ilnur</owner>
<saldo>30</saldo>
<cdate>2009-12-03T00:39:00.082628+03:00</cdate>
</Account>
</account>
<id-counter>4</id-counter>
</bank>
Вообще существует большое количество атрибутов, но я могу только догадываться зачем они нужны.
- Добавить комментарий
- 8095 просмотров