xmlns:xsd='http://www.w3.org/2001/XMLSchema'>

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

Здесь нет ничего необычного. Мы могли бы выполнить преобразование документа XML и вывести его как HTML, загрузить его в DataSet с помощью ADO.NET, загрузить с его помощью XmlDocument, как в примере, десериализовать его и создать объект в том же состоянии, которое имел pd перед своей сериализацией (что соответствует событию второй кнопки).

Рассмотренный только что пример является очень простым. Обычно имеется ряд методов получения (get) и задания (set) свойств для работы с данными в объекте. Но что, если объект состоит из двух других объектов, или выводится из базового класса, из которого следуют и другие классы?

Такие ситуации обрабатываются с помощью класса XmlSerializer. Давайте усложним пример (находится в SerialSample2). Для большей реалистичности сделаем каждое свойство доступным через методы get и set:

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

 // новый объект products

 Products pd=new Products();

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

 pd.ProductID=200;

 pd.CategoryID=100;

 pd.Discontinued=false;

 pd.ProductName='Serialize Objects';

 pd.QuantityPerUnit='6';

 pd.ReorderLevel=1;

 pd.SupplierID=1;

 pd.UnitPrice=1000;

 pd.UnitsInStock=10;

 pd.UnitsOnOrder= 0;

 pd.Discount=2;

 //новые TextWriter и XmlSerializer

 TextWriter tr=new StreamWriter('..\..\..\serialprod1.xml');

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

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

 sr.Serialize(tr, pd);

 tr.Close();

}

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

 //создать ссылку на тип Products

 Products newPd;

 // новый файловый поток для открытия сериализуемого объекта

 FileStream f=new FileStream('..\..\..\serialprod1.xml', FileMode.Open);

 // новый сериализатор

 XmlSerializer newSr=new XmlSerializer(typeof(Products));

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

 newPd=(Products)newSr.Deserialize(f);

 //загрузить его в окно списка.

 listBox1.Items.Add(newPd.ProductName);

 f.Close();

}

//класс, который будет сериализован.

//атрибуты определяют, как объект сериализуется

[System.Xml.Serialization.XmlRootAttribute()]

public class Products {

 private int prodId;

 private string prodName;

 private int suppId;

 private int catId;

 private string qtyPerUnit;

 private Decimal unitPrice;

 private short unitsInStock;

 private short unitsOnOrder;

 private short reorderLvl;

 private bool discont;

 private int disc;

 // добавлен атрибут Discount

 [XmlAttributeAttribute(AttributeName='Discount')]

 public int Discount {

  get {return disc;}

  set {disc=value;}

 }

 [XmlElementAttribute()]

 public int ProductID {

  get {return prodId;}

  set {prodId=value;}

 }

 [XmlElementAttribute()]

 public string ProductName {

  get {return prodName;}

  set {prodName=value;}

 }

 [XmlElementAttribute()]

 public int SupplierID {

  get {return suppId;}

  set {suppId=value;}

 }

 [XmlElementAttribute()]

 public int CategoryID {

  get {return catId;}

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

0

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

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