Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

}

Это тот же пример, что и раньше, но первое, что необходимо заметить,— здесь нет добавленных в класс

Inventory
атрибутов. Поэтому в данном случае представьте, что классы
Inventory
,
Product
и производный класс
BookProduct
находятся в отдельной DLL, и у нас нет исходного кода.

Первым шагом в процессе является создание объекта на основе

XmlAttributes
, и объекта
XmlElementAttribute
для каждого типа данных, который будет переопределяться:

XmlAttributes attrs=new XmlAttributes;

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

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

Здесь

мы добавляем новый
XmlElementAttribute
к коллекции
XmlElements
класса
XmlAttributes
. Класс
XmlAttributes
имеет свойства, соответствующие атрибутам, которые могут применяться;
XmlArray
и
XmlArrayItems
, которые мы видели в предыдущем примере, являются только парой. Теперь мы имеем объект
XmlAttributes
с двумя объектами на основе
XmlElementAttribute
, добавленными к коллекции
XmlElements
. Далее создадим объект
XmlAttributeOverrides
:

XmlAttributeOverrides attrOver = new XmlAttributeOverride;

attrOver.Add(typeof(Inventory) , "Inventory Items", attrs);

Meтод

Add
имеет две перегружаемые версии. Первая получает информацию о типе переопределяемого объекта и объект
XmlAttributes
, который был создан ранее. Вторая версия та, что мы используем, получает также с строковое значение, которое является членом в переопределенном объекте. В нашем случае мы хотим переопределить член
InventoryItems
в классе
Inventory
.

Теперь создадим объект

XmlSerializer
, добавляя объект
XmlAttributeOverrides
в качестве параметра.
XmlSerializer
уже знает, какие типы мы хотим переопределить и что нам нужно вернуть для этих типов. Если выполнить метод
Serialize
, то получится следующий вывод XML:

<?xml version="1.0"?>

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

 <Products>

<ProductID>100</ProductID>

<ProductName>Product Thing</ProductName>

<SupplierID>10</SupplierID>

 </Product>

 <Book>

<ProductID>101</ProductID>

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

<SupplierID>10</SupplierID>

<ISBN>123456789</ISBN>

 </Book>

</Inventory>

Мы получили тот же самый XML, что и в предыдущем примере. Чтобы десериализовать этот объект и воссоздать объект на основе Inventory, с которого мы начали, необходимо создать

все те же объекты
XmlAttributes
,
XmlElementAttribute
и
XmlAttributeOverrides
, которые создаются при сериализации объекта. Когда это будет сделано, можно прочитать XML и воссоздать объект
Inventory
, как это делалось раньше. Вот код для десериализации объекта
Inventory
:

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

 XmlAttributes attrs=new XmlAttributes;

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

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

 XmlAttributeOverrides attrOver=new XmlAttributeOverrides;

 attrOver.Add(typeof(Inventory), "InventoryItems", attrs);

 Inventory newInv;

 FileStream f=new FileStream("..\\..\\..\\inventory.xml", FileMode.Open);

 XmlSerializer newSr=new XmlSerializer(typeof(Inventory), attrOver);

 newInv=(Inventory)newSr.Deserialize(f);

 foreach(Product prod, in newInv.InventoryItems) listBox1.items.Add(prod.ProductName);

 f.Close;

}

Отметим, что первые несколько строк кода идентичны коду, который использовался для сериализации объекта.

Пространство имен

XmlSerialize
предоставляет мощный набор инструментов. Сериализуя объекты в XML, а не в двоичный формат, мы получаем дополнительные возможности, что может действительно увеличить гибкость проектирования.

Заключение

В этой главе рассматривались широкие возможности пространства имен

System.Xml
платформы .NET. Было показано, как прочитать и записать документы XML с помощью классов на основе
XMLReader
и
XMLWriter
, как в .NET реализована DOM и как использовать возможности DOM. Мы увидели, что XML и ADO.NET действительно очень тесно связаны.
DataSet
и документ XML являются двумя различными представлениями одной и той же базовой архитектуры. Мы сериализовали объекты в XML и смогли вернуть их обратно с помощью вызова пары методов. Комбинация
Reflection
и
XMLSerilization
приводит к некоторым уникальным конструкциям. И, конечно, были рассмотрены
XPath
и
XslTransform
. В течение ближайших нескольких лет XML станет, если уже не стал, важной частью разработки приложений. Платформа .NET сделала доступным мощный набор инструментов для работы с XML. 

Глава 14

Операции с файлами и реестром

В этой главе будет рассмотрено выполнение в C# задач, включающих чтение и запись в файлы и в системный реестр. В частности, будут охвачены следующие вопросы:

□ Исследование структуры каталога, выяснение, какие файлы и папки присутствуют и проверка их свойств

□ Перемещение, копирование и удаление файлов и папок

□ Чтение и запись текста в и из файлов

□ Чтение и запись в реестр

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

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Мастер Разума II

Кронос Александр
2. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.75
рейтинг книги
Мастер Разума II

Идеальный мир для Социопата 4

Сапфир Олег
4. Социопат
Фантастика:
боевая фантастика
6.82
рейтинг книги
Идеальный мир для Социопата 4

Проклятый Лекарь V

Скабер Артемий
5. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь V

Live-rpg. эволюция-5

Кронос Александр
5. Эволюция. Live-RPG
Фантастика:
боевая фантастика
5.69
рейтинг книги
Live-rpg. эволюция-5

Сонный лекарь 6

Голд Джон
6. Сонный лекарь
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Сонный лекарь 6

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Мимик нового Мира 8

Северный Лис
7. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 8

Титан империи 4

Артемов Александр Александрович
4. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 4

Бездомыш. Предземье

Рымин Андрей Олегович
3. К Вершине
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Бездомыш. Предземье

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Генерал Скала и сиротка

Суббота Светлана
1. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Генерал Скала и сиротка