Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

 // новый Serializer

 XmlSerializer newSr=new XmlSerializer(typeof(Products));

 // десериализация объекта

 newPd=(Products)newSr.Deserialize(f);

 // загружаем его в окно списка.

 listBox1.Items.Add(newPd.ProductName);

 f.Closed;

}

Теперь мы проверим класс

Products
. Единственное различие между ним и любым другим классом, который можно
записать, состоит в добавленных атрибутах. Не путайте эти атрибуты с атрибутами в документе XML. Эти атрибуты расширяют класс
SystemAttribute
. Атрибут является некоторой декларативной информацией, которая может извлекаться во время выполнения с помощью CLR (см. в главе 6 более подробно). В данном случае добавляются атрибуты, которые описывают, как объект должен быть сериализован:

//класс, который будет сериализован,

//атрибуты определяют, как объект сериализуется.

[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

public class Products {

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public int ProductID;

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public string ProductName;

 [System.Xml.Serialization.XmlElementAttribute]

 public int SupplierID;

 [System.Xml.Serialization.XmlElementAttribute]

 public int CategoryID;

 [System.Xml.Serialization.XmlElementAttribute]

 public string QuantityPerUnit;

 [System.Xml.Serialization.XmlElementAttribute]

 public System.Decimal UnitPrice;

 [System.Xml.Serialization.XmlElementAttribute]

 public short UnitsInStock;

 [System.Xml.Serialization.XmlElementAttribute]

 public short UnitsOnOrder;

 [System.Xml.Serialization.XmlElementAttribute]

 public short ReorderLevel;

 [System.Xml.Serialization.XmlElementAttribute]

 public bool Discontinued;

}

Созданный документ XML выглядит, как любой другой документ XML, который мы могли бы создать.

<?xml version="1.0" ?>

<Products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <ProductID>200</ProductID>

 <ProductName>Serialize Objects</ProductName>

 <SupplierID>1</SupplierID>

 <CategoryID>100</CategoryID>

 <QuantityPerUnit>6</QuantityPerUnit>

 <UnitPrice>1000</UnitPrice>

 <UnitsInStock>10</UnitsInStock>

 <UnitsOnOrder>0</UnitsOnOrder>

 <ReorderLevel>1</ReorderLevel>

 <Discontinued>false</Discontinued>

</Products>

Здесь

нет ничего необычного. Мы могли бы выполнить преобразование документа XML и вывести его как HTML, загрузить его в
DataSet
с помощью ADO.NET, загрузить с его помощью
XmlDocument
, как в примере, десериализовать его и создать объект в том же состоянии, которое имел
pd
перед своей сериализацией (что соответствует событию второй кнопки).

Рассмотренный только что пример является очень простым. Обычно имеется ряд методов получения (get) и задания (set) свойств для работы с данными в объекте. Но что, если объект состоит из двух других объектов, или выводится из базового класса, из которого следуют и другие классы?

Такие ситуации обрабатываются с помощью класса

XmlSerializer
. Давайте усложним пример (находится в
SerialSample2
). Для большей реалистичности сделаем каждое свойство доступным через методы get и set:

private void button1_Click(object sender, System.EventArgs e) {

 // новый объект products

 Products pd=new Products;

 // задать некоторые свойства

 pd.ProductID=200;

 pd.CategoryID=100;

 pd.Discontinued=false;

 pd.ProductName="Serialize Objects";

 pd.QuantityPerUnit="6";

 pd.ReorderLevel=1;

 pd.SupplierID=1;

 pd.UnitPrice=1000;

 pd.UnitsInStock=10;

 pd.UnitsOnOrder= 0;

 pd.Discount=2;

 //новые TextWriter и XmlSerializer

 TextWriter tr=new StreamWriter("..\\..\\..\\serialprod1.xml");

 XmlSerializer sr=new XmlSerializer(typeof(Products));

 // сериализируем объект

 sr.Serialize(tr, pd);

 tr.Close;

}

private void button2_Click(object sender, System.EventArgs e) {

 //создать ссылку на тип Products

 Products newPd;

 // новый файловый поток для открытия сериализуемого объекта

 FileStream f=new FileStream("..\\..\\..\\serialprod1.xml", FileMode.Open);

 // новый сериализатор

 XmlSerializer newSr=new XmlSerializer(typeof(Products));

 //десериализуем объект

Поделиться:
Популярные книги

Приручитель женщин-монстров. Том 15

Дорничев Дмитрий
15. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
постапокалипсис
5.00
рейтинг книги
Приручитель женщин-монстров. Том 15

Ст. сержант. Назад в СССР. Книга 5

Гаусс Максим
5. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ст. сержант. Назад в СССР. Книга 5

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Неудержимый. Книга XXVI

Боярский Андрей
26. Неудержимый
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVI

Ложная девятка 2

Риддер Аристарх
2. 4-4-2
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ложная девятка 2

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Жандарм 5

Семин Никита
5. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 5

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Хозяйка забытой усадьбы

Воронцова Александра
5. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка забытой усадьбы

Большие Песцовые радости

Видум Инди
8. Под знаком Песца
Фантастика:
альтернативная история
аниме
5.25
рейтинг книги
Большие Песцовые радости

Золушка по имени Грейс

Ром Полина
Фантастика:
фэнтези
8.63
рейтинг книги
Золушка по имени Грейс