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

на главную

Жанры

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

Ватсон Карли

Шрифт:

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

 // создать новые объекты книги и книжной продукции

 Product newProd=new Product;

 BookProduct newBook=new BookProduct;

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

 newProd.ProductID=100;

 newProd.ProductName="Product Thing";

 newProd.SupplierID=10;

 newBook.ProductID=101;

 newBook.ProductName="How to Use Your New Product Thing";

 newBook.SupplierID=10;

 newBook.ISBN="123456789";

 //поместить
элементы в массив

 Product[] addProd={newProd, newBook};

 // новый объект Inventory с помощью массива addProd

 Inventory inv=new Inventory;

 inv.InventoryItems=addProd;

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

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

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

 sr.Serialize(tr, inv);

 tr.Close;

}

Отметим в событии

button2_Click
, что мы просматриваем массив во вновь созданном объекте
newInv
, чтобы показать, что это те же данные:

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

 Inventory newInv;

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

 XmlSerializer newSr=new XmlSerializer(typeof{Inventory));

 newInv=(Inventory)newSr.Deserialize(f);

 foreach(Product prod in newInv.Inventory Items) listBox1.Items.Add(prod.ProductName);

 f.Close;

}

public class inventory {

 private Product[] stuff;

 public Inventory {}

Мы имеем

XmlArrayItem
для каждого типа, который может быть добавлен в массив. Первый параметр определяет имя элемента в создаваемом документе XML. Если опустить этот параметр
ElementName
, то элементы получат имя типа объекта (в данном случае
Product
и
BookProduct
). Существует также класс
XmlArrayAttribute
, который будет использоваться, если свойство возвращает массив объектов или примитивных типов. Так как мы возвращаем в массиве различные типы, то используется объект
XmlArrayItemAttribute
, который предоставляет более высокий уровень управления:

 // необходимо иметь запись атрибута для каждого типа данных

 [XmlArrayItem("Prod", typeof(Product)), XmlArrayItem("Book", typeof(BookProduct))]

 //public Inventory(Product [] InventoryItems) {

 // stuff=InventoryItems;

 //}

 public Product[] InventoryItems {

get {return stuff;}

set {stuff=value;}

 }

}

//класс Product

public class Product {

 private int prodId;

 private string prodName;

 private int suppId;

 public Product {}

 public int ProductID {

get {return prodId;}

set {prodId=value;}

 }

 public string ProductName {

get {return prodName;}

set {prodName=value;}

 }

 public int SupplierID {

get {return suppId;}

set {suppId=value;}

 }

}

//
Класс Bookproduct

public class BookProduct: Product {

 private string isbnNum;

 public BookProduct {}

 public string ISBN {

get {return isbnNum;}

set {isbnNum=value;}

 }

}

В этот пример добавлено два новых класса. Класс

Inventory
будет отслеживать то, что добавляется на склад. Можно добавлять продукцию на основе класса
Product
или класса
BookProduct
, который расширяет
Product
. В классе
Inventory
содержится массив добавленных объектов и в нем могут находиться как
BookProducts
, так и
Products
. Вот как выглядит документ XML:

<?xml version="1.0" ?>

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

 <InventoryItems>

<Prod>

<ProductID>100</ProductID>

<ProductName>Product Thing</ProductName>

<SupplierID>10</SupplierID>

</Prod>

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

Кровь Василиска

Тайниковский
1. Кровь Василиска
Фантастика:
фэнтези
попаданцы
аниме
4.25
рейтинг книги
Кровь Василиска

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Сопряжение 9

Астахов Евгений Евгеньевич
9. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
технофэнтези
рпг
5.00
рейтинг книги
Сопряжение 9

На три фронта

Бредвик Алекс
3. Иной
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
На три фронта

Авиатор: назад в СССР 11

Дорин Михаил
11. Покоряя небо
Фантастика:
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 11

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Лорд Системы 8

Токсик Саша
8. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 8

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

Игра топа. Между двух огней

Вяч Павел
2. Игра топа
Фантастика:
фэнтези
7.57
рейтинг книги
Игра топа. Между двух огней

Провинциал. Книга 2

Лопарев Игорь Викторович
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 2

Идущий в тени 6

Амврелий Марк
6. Идущий в тени
Фантастика:
фэнтези
рпг
5.57
рейтинг книги
Идущий в тени 6

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10