Console.WriteLine("***** Fun with Object Serialization *****\n");
// Создать объект JamesBondCar и установить состояние.
JamesBondCar jbc = new
{
CanFly = true,
CanSubmerge = false,
TheRadio = new
{
StationPresets = new {89.3, 105.1, 97.1},
HasTweeters = true
}
};
Person p = new
{
FirstName = "James",
IsAlive = true
};
Итак, все готово для того, чтобы приступить к исследованию сериализации XML и JSON.
Сериализация и десериализация с помощью XmlSerializer
Пространство имен
System.Xml
предоставляет класс
System.Xml.Serialization.XmlSerializer
. Этот форматер можно применять для сохранения открытого состояния заданного объекта в виде чистой XML-разметки. Важно отметить, что
XmlSerializer
требует объявления типа, который будет сериализироваться (или десериализироваться).
Управление генерацией данных XML
Если у вас есть опыт работы с технологиями XML, то вы знаете, что часто важно гарантировать соответствие данных внутри документа XML набору правил, которые устанавливают действительность данных. Понятие действительного документа XML не имеет никакого отношения к синтаксической правильности элементов XML (вроде того, что все открывающие элементы должны иметь закрывающие элементы). Действительные документы отвечают согласованным правилам форматирования (например, поле
X
должно быть выражено в виде атрибута, но не подэлемента), которые обычно задаются посредством схемы XML или файла определения типа документа (Document-Type Definition — DTD).
По умолчанию класс
XmlSerializer
сериализирует все открытые поля/свойства как элементы XML, а не как атрибуты XML. Чтобы управлять генерацией результирующего документа XML с помощью класса
XmlSerializer
, необходимо декорировать типы любым количеством дополнительных атрибутов .NET Core из пространства имен
System.Xml.Serialization
. В табл. 20.12 описаны некоторые (но не все) атрибуты .NET Core, влияющие на способ кодирования данных XML в потоке. < image l:href="#"/>
Разумеется, для управления тем, как
XmlSerializer
генерирует результирующий XML-документ, можно использовать многие другие атрибуты .NET Core. Полные сведения ищите в описании пространства имен
System.Xml.Serialization
в документации по .NET Core.
На заметку! Класс
XmlSerializer
требует, чтобы все сериализируемые типы в графе объектов поддерживали стандартный конструктор (поэтому обязательно добавьте его обратно, если вы определяете специальные конструкторы).
Сериализация объектов с использованием XmlSerializer