Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 }

 [XmlElementAttribute]

 public pool Discontinued {

get {return discont;}

set {discont=value;}

 }

}

Выполнение этого кода вместо класса

Products
в предыдущем примере даст те же самые результаты с одним исключением. Мы добавили атрибут
Discount
, тем самым показав, что атрибуты также могут быть сериализуемыми. Вывод выглядит следующим образом (
serialprod1.xml
):

<?xml version="1.0" encoding="utf-8"?>

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

 <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>

Отметим атрибут

Discount
элемента
Products
. Поэтому теперь, когда определены средства задания и получения свойств, можно добавить более сложную проверку кода в свойствах.

Что можно сказать о ситуации, когда имеются производные классы и, возможно, свойства, которые возвращают массив?

XmlSerializer
также это охватывает. Давайте обсудим более сложную ситуацию.

В событии

button1_Click
создается новый объект на основе
Product
и новый объект на основе
BookProduct
(
newProd
и
newBook
). Мы добавляем данные в различные свойства каждого объекта и помещаем объекты в массив на основе
Product
. Затем создается новый объект на основе
Inventory
, которому в качестве параметра передается массив. Затем можно сериализовать объект
Inventory
, чтобы впоследствии его восстановить:

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;

  • Читать дальше
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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