Підрозділ 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
[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, і при зворотному читанні відновлює правильний тип.
Практичний сценарій: збереження протоколу обходу
