set {catId=value;}

 }

 [XmlElementAttribute()]

 public string QuantityPerUnit {

  get {return qtyPerUnit;}

  set {qtyPerUnit=value;}

 }

 [XmlElementAttribute()]

 public Decimal UnitPrice {

  get {return UnitPrice;}

  set {unitPrice=value;}

 }

 [XmlElementAttribute()]

 public short UnitsInStock {

  get {return unitsInStock;}

  set {unitsInStock=value;}

 }

 [XmlElementAttribute()]

 public short UnitsOnOrder {

  get {return unitsOrOrder;}

  set {unitsOnOrder=value;}

 }

 [XmlElementAttribute()]

 public short ReorderLevel {

  get {return reorderLvl;}

  set {reorderLvl=value;}

 }

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату