Сериализация объектов с помощью XmlSerializer
Сериализация объектов с помощью XmlSerializer
Вдобавок к SOAP и двоичному формату, компоновочный блок System.Xml.dll предлагает третий формат, обеспечиваемый типом System.Xml.Serialization. XmlSerializer который может использоваться для сохранения состояния данного объекта в виде "чистого" XML в противоположность данным XML, упакованным в сообщении SOAP. Работа с этим типом немного отличается от работы с типами SoapFormatter и BinaryFormatter. Рассмотрим следующий программный код.
using Sуstem.Xml.Serialization;
…
static void Main(string[] args) {
…
// Сохранение объекта в файл CarData.xml в формате XML.
XmlSerializer xmlFormat = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio), typeof(Car) });
fStream = new FileStream("CarData.xml", FileMode.Create, FileAccess.Write, FileShare.None);
xmlFormat.Serialize(fStream, jbc);
fStream.Close();
…
}
Здесь главным отличием является то, что тип XmlSerializer требует указания информации о типе соответствующего элемента объектного графа. Обратите внимание на то, что первый аргумент конструктора XmlSerializer определяет корневой элемент XML-файла, а второй аргумент является массивом типов System.Type, содержащих метаданные подчиненных элементов. Если заглянуть в сгенерированный файл CarData.xml, вы увидите следующий XML-код (здесь он приводится в сокращенном виде).
‹?xml version="1.0" encoding="utf-8"?›
‹JamesBondCar xmlns:xsi="…"›
‹theRadio›
‹hasTweeters›true‹/hasTweeters›
‹hasSubWoofers›false‹/hasSubwoofers›
‹stationPresets›
‹double›89.3‹/double›
‹double›105.1‹/double›
‹double›97.1‹/double›
‹/stationPresets›
‹/theRadio›
‹isHatchBack›false‹/isHatchBack›
‹canFly›true‹/canFly›
‹canSubmerge›false‹/canSubmerge›
‹/JamesBondCar›
Замечание. Для XmlSerializer требуется, чтобы все типы в объектном графе, предназначенные для сериализации, поддерживали конструктор, заданный по умолчанию (так что не забудьте добавить его, если вы определили пользовательские конструкторы). Если это условие не будет выполнено, в среде выполнения будет сгенерировано исключение InvalidOperationException.
Лето — время эзотерики и психологии! ☀️
Получи книгу в подарок из специальной подборки по эзотерике и психологии. И скидку 20% на все книги Литрес
ПОЛУЧИТЬ СКИДКУ