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>
Поделиться:
Популярные книги
Земная жена на экспорт
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Переиграть войну! Пенталогия
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Жаба с кошельком
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Трудовые будни барышни-попаданки 3
3. Барышня-попаданка
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Камень. Книга восьмая
8. Камень
Фантастика:
фэнтези
боевая фантастика
7.00
рейтинг книги
(Бес) Предел
Любовные романы:
современные любовные романы
6.75
рейтинг книги
Имперский Курьер. Том 3
3. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Ты всё ещё моя
4. Под запретом
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Последняя Арена 5
5. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Черный маг императора 3
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Младший сын князя
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Локки 4 Потомок бога
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Блуждающие огни 4
4. Блуждающие огни
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Камень. Книга вторая
2. Камень
Фантастика:
фэнтези
8.52