Microsoft осознала важность сериализации данных, поэтому включила пространства имен System.Runtime.Serialization и System.Xml.Serialization в платформу .NET, чтобы обеспечить функции сериализации и предоставить пользователям возможность писать свои собственные методы сериализации. . Пространство имен System.Xml.Serialization предоставляет базовые методы сериализации объекта в формат XML. Давайте посмотрим, как использовать этот метод.
Очарование XML
Сериализованный XML относится к процессу сохранения общедоступных полей и атрибутов объекта в последовательном формате (здесь формат XML) для удобства хранения или передачи. Десериализация — это процесс использования информации о последовательном состоянии для восстановления объекта из последовательного состояния XML в исходное состояние. Следовательно, вы можете думать о сериализации как о методе сохранения состояния объекта в потоке или буфере.
Целью сериализации является хранение и преобразование данных. Хранение данных означает сохранение данных во время пользовательских сеансов. Когда приложение закрывается, данные сохраняются (сериализуются), а когда пользователь возвращается, данные перезагружаются (десериализуются). Преобразование данных означает преобразование данных в формат, понятный другой системе. Используя сериализацию и XML, можно легко выполнить преобразование данных.
Данные в объекте могут быть классом, методом, свойством, частным типом, массивом или даже встроенным XML в объект System.Xml.XmlElement или System.Xml.XmlAttribute.
Ключевым классом в пространстве имен System.Xml.Serialization является XmlSerializer. Конечно, это пространство имен также включает в себя и другие классы, связанные с другими аспектами XML и SOAP, но наше внимание сосредоточено на классе XmlSerializer.
XmlSerializer
Класс XmlSerializer предоставляет методы для сериализации объектов в файлы XML и десериализации документов XML в объекты. Он также позволяет пользователям указывать, как объекты преобразуются в XML. Вы можете передать тип объекта, который нужно сериализовать, в качестве параметра конструктору класса. Следующий код C# иллюстрирует использование конструктора.
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
Ниже приведен эквивалентный код VB.NET:
Dim ser As New XmlSerializer(GetType(objectToSerialize))
Фактический процесс сериализации реализуется в методе Serialize класса XmlSerializer. Этот метод позволяет вызывать объекты TextWriter, Stream и XmlWriter во время сериализации. В следующем примере кода показано, как вызвать этот метод. В этом примере объект сериализуется и сохраняется в файл на локальном диске. Пример начинается с объявления класса, за которым следует сериализованный исходный код.
использование системы;
пространство имен BuilderSerialization {
Адрес публичного класса {
публичный адрес() {}
общедоступная строка Адрес1;
общедоступная строка Адрес2;
публичная строка Город;
публичная строка Состояние;
общедоступная строка Zip;
публичная строка Страна;
} }
использование системы;
пространство имен BuilderSerialization {
публичный класс Автор {
публичный Автор() { }
общедоступная строка FirstName;
общедоступная строка MiddleName;
общедоступная строка LastName;
общедоступная строка Название;
общедоступная строка Пол;
Публичный адрес AddressObject;
} }
пространство имен BuilderSerialization {
публичный класс Книга {
публичная книга() { }
общедоступная строка Название;
общедоступный автор AuthorObject;
общедоступная строка ISBN;
публичный двойной RetailPrice;
общедоступная строка Издатель;
}}
использование системы;
использование System.Xml.Serialization;
использование System.IO;
пространство имен BuilderSerialization {
класс TestClass {
static void Main(string[] args) {
Книга BookObject = новая Книга ();
XmlSerializer ser = новый XmlSerializer(typeof(Book));
TextWriter Writer = новый StreamWriter("booktest.xml");
BookObject.Title = "Практический LotusScript";
BookObject.ISBN = "1884777767";
BookObject.Publisher = "Публикации Мэннинга";
BookObject.RetailPrice = 43,95;
BookObject.AuthorObject = новый Автор();
BookObject.AuthorObject.FirstName = "Тони";
BookObject.AuthorObject.LastName = "Паттон";
BookObject.AuthorObject.Gender = "Мужской";
BookObject.AuthorObject.AddressObject = новый адрес();
BookObject.AuthorObject.AddressObject.Address1 = "Главная улица, 1";
КнигаОбъект.АвторОбъект.АдресОбъект.Город = "Где угодно";
КнигаОбъект.АвторОбъект.АдресОбъект.Состояние = "КИ";
КнигаОбъект.АвторОбъект.АдресОбъект.Zip = "40000";
КнигаОбъект.АвторОбъект.АдресОбъект.Страна = "США";
ser.Serialize(писатель, BookObject);
писатель.Закрыть();
} } }
Приведенный выше код превращает три объекта в один объект, создавая таким образом XML-файл в процессе сериализации. Ниже приведен XML-документ, созданный примером программы:
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
<АвторОбъект>
<Пол>МужскойПол>
<АдресОбъект>
<Адрес1>Главная улица, 1Адрес1>
<Город>Где угодноГород>
<Штат>КентуккиШтат>
<Страна>СШАСтрана>
АдресОбъект>
АвторОбъект>
Обратите внимание, что процесс сериализации также может обрабатывать вложенные данные объекта. Данные преобразуются в распознаваемый формат, что облегчает перезагрузку данных (десериализацию) и передачу данных в другую систему. В процессе передачи данных принимающей системе необходимо знать формат XML-файла (если она не знает его заранее). Поэтому необходимо предоставить файл схемы XML. Инструмент XSD.exe в .NET Framework может создать файл схемы для сериализованного XML.
Ниже приведен пример кода, написанного на VB.NET:
Адрес открытого класса.
Публичный адрес1 как строка
Публичный адрес2 как строка
Публичный город как строка
Публичное состояние как строка
Публичный почтовый индекс как строка
Публичная страна в виде строки
Конечный класс
Автор публичного класса
Публичное имя в виде строки
Публичное среднее имя в виде строки
Публичная фамилия в виде строки
Публичное название в виде строки
Общественный пол как строка
Публичный адресОбъект как адрес
Конечный класс
Книга для публичного класса
Публичный авторОбъект как автор
Публичное название в виде строки
Публичный ISBN в виде строки
Общественная розничная цена увеличивается вдвое
Публичный издатель как строка
Конечный класс
Импортирует System.Xml.Serialization
ИмпортируетSystem.IO
Модуль Модуль1
Подглавная()
Тусклый книжный объект как новая книга
Dim ser As New XmlSerializer(GetType(Book))
Dim Writer как новый StreamWriter("booktest.xml")
С книжным объектом
.Title = "Практический LotusScript"
.ISBN = "1884777767"
.Publisher = "Публикации Мэннинга"
.RetailPrice = 43,95
.AuthorObject = Новый автор
.AuthorObject.FirstName = "Тони"
.AuthorObject.LastName = "Паттон"
.AuthorObject.Gender = "Мужской"
.AuthorObject.AddressObject = Новый адрес
.AuthorObject.AddressObject.Address1 = "Главная улица, 1"
.АвторОбъект.АдресОбъект.Город = "Где угодно"
.АвторОбъект.АдресОбъект.Состояние = "КИ"
.АвторОбъект.АдресОбъект.Zip = "40000"
.АвторОбъект.АдресОбъект.Страна = "США"
Конец с
ser.Serialize(писатель, BookObject)
писатель.Закрыть()
Конец субтитра
Выход управления
конечным модулем
В процессе сериализации создаются стандартные файлы XML, а элементы данных преобразуются в элементы XML. Однако не все члены данных становятся элементами. Вы можете управлять выходным XML-файлом, добавляя некоторые теги в код класса. Таким образом, элементы данных можно преобразовать в атрибуты XML, а не в элементы, или просто игнорировать. Следующий пример представляет собой модифицированный код VB.NET класса книги.
Книга для публичного класса
Публичный авторОбъект как автор
Публичное название в виде строки
Публичный ISBN в виде строки
Общественная розничная цена увеличивается вдвое
Публичный издатель как строка
Конечный класс
Этот код сообщает системе использовать ISBN члена класса в качестве атрибута XML при создании XML-файла и игнорировать член RetailPrice. Это изменение можно увидеть в сгенерированном XML-файле:
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " ISBN="1884777767 ">
<АвторОбъект>
<Пол>МужскойПол>
<АдресОбъект>
<Адрес1>Главная улица, 1Адрес1>
<Город>Где угодноГород>
<Штат>КентуккиШтат>
<Страна>СШАСтрана>
АдресОбъект>
АвторОбъект>
Ниже приведен соответствующий код C#:
public class Book {
публичная книга() { }
общедоступная строка Название;
общедоступный автор AuthorObject;
[System.Xml.Serialization.XmlAttribute()]
общедоступная строка ISBN;
[System.Xml.Serialization.XmlIgnoreAttribute()]
публичный двойной RetailPrice;
общедоступная строка Издатель;
}
Выше только кратко упоминаются два символа маркировки. Пожалуйста, обратитесь к документации .NET для получения полной информации о разметке.
Десериализацию десериализованных данных можно легко выполнить, вызвав метод Deserialize класса XmlSerializer. Следующий фрагмент программы VB.NET завершает десериализацию упомянутого выше XML-документа:
Dim BookObject As New Book
Dim ser As New XmlSerializer(GetType(Book))
Dim fs As New System.IO.FileStream("booktest.xml", FileMode.Open)
Dim Reader как новый System.XML.XmlTextReader(fs)
BookObject = CType(ser.Deserialize(reader), Book)
Эта программа помещает данные результата в память для дальнейшего использования. Вот эквивалентный код C#:
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = новый System.IO.FileStream("booktest.xml",
РежимФайла.Открыть);
Читатель System.Xml.XmlTextReader = новый System.Xml.XmlTextReader(fs);
Книга BookObject = (Книга)(ser.Deserialize(читатель));
-------------------------------------------------- -
Об авторе: Тони Паттон — профессиональный разработчик приложений с обширными знаниями и сертифицирован по Java, VB, Lotus и XML.