□ Генерировать классы DataSet из файла схемы XSD

□ Генерировать классы времени выполнения, которые имеют специальные атрибуты для XmlSerilization

□ Генерировать XSD из классов, которые уже были разработаны

□ Ограничивать список элементов, которые создаются в коде

□ Определять, на каком языке программирования должен быть представлен генерируемый код (C#, VB.NET, или JScript.NET)

□ Создавать схемы из типов в компилированных сборках

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

Несмотря на предлагаемые возможности, вовсе не обязательно использовать xsd.exe, чтобы создать классы для сериализации. Рассмотрим простое приложение, которое сериализует класс, считывающий данные о продуктах, сохраненных ранее в этой главе (пример находится в папке SerialSample1). В начале идет очень простой код, который создает новый объект Product, pd, и записывает некоторые данные:

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

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

 Products pd=new Products();

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

 pd.ProductXD=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;

Метод Serialize класса XmlSerializer имеет шесть перегружаемых версий. Одним из требуемых параметров является поток для записи в него данных. Это может быть Stream, TextWriter или XmlWriter. В данном случае мы создали объект tr на основе TextWriter. Затем необходимо создать объект sr на основе XmlSerializer. XmlSerializer должен знать информацию о типе сериализуемого объекта, поэтому используется ключевое слово typeof с указанием типа, который должен быть сериализован. После создания объекта sr вызывается метод Serialize, в который передается tr (объект на основе Stream) и объект, который необходимо сериализовать, в данном случае pd. Не забудьте закрыть поток, когда закончите с ним работу.

 //новый TextWriter и XmlSerializer

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

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

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

 sr.Serialize(tr,pd);

 tr.Close();

}

Здесь мы добавляем событие другой кнопки для создания нового объекта newPd на основе Products. В этот раз мы будем использовать объект FileStream для чтения XML:

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

 // создаем ссылку на тип Products Products newPd;

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

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

Здесь создается новый объект XmlSerializer, таким образом передается информация о типе Product. Затем можно вызвать метод Deserialize. Отметим, что нам по- прежнему необходимо делать явное преобразование типа, когда создается объект newPd. В этом месте newPd имеет такое же состояние, как и pd:

 // новый Serializer

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

 // десериализация объекта

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

 // загружаем его в окно списка.

 listBox1.Items.Add(newPd.ProductName);

 f.Closed();

}

Теперь мы проверим класс Products. Единственное различие между ним и любым другим классом, который можно записать, состоит в добавленных атрибутах. Не путайте эти атрибуты с атрибутами в документе XML. Эти атрибуты расширяют класс SystemAttribute. Атрибут является некоторой декларативной информацией, которая может извлекаться во время выполнения с помощью CLR (см. в главе 6 более подробно). В данном случае добавляются атрибуты, которые описывают, как объект должен быть сериализован:

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

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

[System.Xml.Serialization.XmlRootAttribute(Namespace='', IsNullable=false)]

public class Products {

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public int ProductID;

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public string ProductName;

 [System.Xml.Serialization.XmlElementAttribute()]

 public int SupplierID;

 [System.Xml.Serialization.XmlElementAttribute()]

 public int CategoryID;

 [System.Xml.Serialization.XmlElementAttribute()]

 public string QuantityPerUnit;

 [System.Xml.Serialization.XmlElementAttribute()]

 public System.Decimal UnitPrice;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short UnitsInStock;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short UnitsOnOrder;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short ReorderLevel;

 [System.Xml.Serialization.XmlElementAttribute()]

 public bool Discontinued;

}

Созданный документ XML выглядит, как любой другой документ XML, который мы могли бы создать.

<?xml version='1.0' ?>

<Products xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

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

0

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

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