C# для профессионалов. Том II
Шрифт:
// новый Serializer
XmlSerializer newSr=new XmlSerializer(typeof(Products));
// десериализация объекта
newPd=(Products)newSr.Deserialize(f);
// загружаем его в окно списка.
listBox1.Items.Add(newPd.ProductName);
f.Closed;
}
Теперь мы проверим класс
Products
. Единственное различие между ним и любым другим классом, который можно
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>
Здесь
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));
//десериализуем объект
Поделиться:
Популярные книги
Кровь Василиска
1. Кровь Василиска
Фантастика:
фэнтези
попаданцы
аниме
4.25
рейтинг книги
Венецианский купец
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Сопряжение 9
9. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
технофэнтези
рпг
5.00
рейтинг книги
На три фронта
3. Иной
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Авиатор: назад в СССР 11
11. Покоряя небо
Фантастика:
альтернативная история
5.00
рейтинг книги
Санек
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Лорд Системы 8
8. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Мерзавец
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Игра топа. Между двух огней
2. Игра топа
Фантастика:
фэнтези
7.57
рейтинг книги
Провинциал. Книга 2
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Идущий в тени 6
6. Идущий в тени
Фантастика:
фэнтези
рпг
5.57
рейтинг книги
На границе империй. Том 9. Часть 4
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Крестоносец
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Идеальный мир для Лекаря 10
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00