OOP Course
Сьогодні

Підрозділ 19.5

XmlSerializer — атрибутна серіалізація

19.5. XmlSerializer — атрибутна серіалізація XmlSerializer із простору імен System.Xml.Serialization перетворює .NET об'єкти у XML і назад за допомогою атрибутів анотацій прямо на класах та властивостях. Це кла

19.5. XmlSerializer — атрибутна серіалізація

XmlSerializer із простору імен System.Xml.Serialization перетворює .NET-об'єкти у XML і назад за допомогою атрибутів-анотацій прямо на класах та властивостях. Це класичний підхід «contract-first»: ви описуєте структуру XML декораторами, а серіалізатор будує і читає документ автоматично.

На відміну від JsonSerializer, XmlSerializer потребує публічного конструктора без параметрів і публічних властивостей або полів — це жорстка вимога, пов'язана із генерацією коду серіалізатора під час першого виклику.

XmlSerializer — атрибути та схема потоку

Базова серіалізація та десеріалізація

За замовчуванням ім'я кореневого елемента збігається з ім'ям класу, а кожна властивість стає дочірнім елементом. Атрибути-анотації дозволяють повністю змінити цю поведінку.

Атрибути XmlSerializer

[XmlRoot] — кореневий елемент

Атрибут Що робить
[XmlRoot("tag")] Перейменовує кореневий елемент
[XmlElement("tag")] Серіалізує властивість як XML-елемент з даним ім'ям
[XmlAttribute("attr")] Серіалізує властивість як XML-атрибут
[XmlIgnore] Виключає властивість з серіалізації
[XmlText] Серіалізує властивість як текстовий вміст елемента
[XmlArray("list")] Перейменовує обгортковий елемент колекції
[XmlArrayItem("item")] Перейменовує елементи всередині колекції

[XmlArray] та [XmlArrayItem] — серіалізація колекцій

Серіалізація з простором імен

XmlSerializerNamespaces дозволяє додавати або прибирати простори імен з вихідного XML. Якщо передати ns.Add("", "") — серіалізатор не додає зайвих xmlns:xsi та xmlns:xsd.

Десеріалізація з файлу та валідація

Наслідування та [XmlInclude]

[XmlInclude] обов'язковий, якщо ви серіалізуєте колекцію базового типу і очікуєте отримати правильні похідні типи після десеріалізації. Серіалізатор додає xsi:type="BloodTest" у XML, і при зворотному читанні відновлює правильний тип.

Практичний сценарій: збереження протоколу обходу

XmlSerializer — порівняння з JsonSerializer за підходом

Розроблено Tomka Yurii · © 2026 ·