Ватсон Карли
Шрифт:
}
[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;