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

Ватсон Карли

Шрифт:

 public Inventory {}

Мы имеем

XmlArrayItem
для каждого типа, который может быть добавлен в массив. Первый параметр определяет имя элемента в создаваемом документе XML. Если опустить этот параметр
ElementName
, то элементы получат имя типа объекта (в данном случае
Product
и
BookProduct
). Существует также класс
XmlArrayAttribute
, который будет использоваться, если свойство возвращает массив объектов или примитивных типов. Так как мы возвращаем в массиве различные типы, то используется объект
XmlArrayItemAttribute
, который предоставляет более высокий уровень управления:

 // необходимо иметь запись атрибута для каждого типа данных

 [XmlArrayItem("Prod", typeof(Product)), XmlArrayItem("Book", typeof(BookProduct))]

 //public Inventory(Product [] InventoryItems) {

 // stuff=InventoryItems;

 //}

 public Product[] InventoryItems {

get {return stuff;}

set {stuff=value;}

 }

}

//класс Product

public class Product {

 private int prodId;

 private string prodName;

 private int suppId;

 public Product {}

 public int ProductID {

get {return prodId;}

set {prodId=value;}

 }

 public string ProductName {

get {return prodName;}

set {prodName=value;}

 }

 public int SupplierID {

get {return suppId;}

set {suppId=value;}

 }

}

// Класс Bookproduct

public class BookProduct: Product {

 private string isbnNum;

 public BookProduct {}

 public string ISBN {

get {return isbnNum;}

set {isbnNum=value;}

 }

}

В этот пример добавлено два новых класса. Класс

Inventory
будет отслеживать то, что добавляется на склад. Можно добавлять продукцию на основе класса
Product
или класса
BookProduct
, который расширяет
Product
. В классе
Inventory
содержится массив добавленных объектов и в нем могут находиться как
BookProducts
, так и
Products
. Вот как выглядит документ XML:

<?xml version="1.0" ?>

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

 <InventoryItems>

<Prod>

<ProductID>100</ProductID>

<ProductName>Product Thing</ProductName>

<SupplierID>10</SupplierID>

</Prod>

<Book>

<ProductID>101</ProductID>

<ProductName>How to Use Your New Product Thing</ProductName>

<SupplierID>10</SupplierID>

<ISBN>123456789</ISBN>

</Book>

 </InventoryItems>

</Inventory>

Все это работает прекрасно, но как быть в ситуации, когда нет доступа к исходному коду типов, которые будут сериализироваться? Невозможно добавить атрибут, если отсутствует исходный код. Существует другой способ. Можно воспользоваться классами

XmlAttributes
и
XmlAtrtributeOverrides
. Вместе эти классы позволят выполнить в точности то, что только что было сделано, но без добавления атрибутов. Вот пример, находящийся в папке
SerialSample4
:

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

 // создать объект XmlAttributes XmlAttributes attrs=new XmlAttributes;

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

 attrs.XmlElements.Add(new XmlElementAttribute("Book", typeof(BookProduct)));

 attrs.XmlElements.Add(new XmlElementAttribute("Product", typeof(Product)));

 XmlAttributeOverrides attrOver=new XmlAttributeOverrides;

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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