Підрозділ 18.6
System.Text.Json. Серіалізація та десеріалізація
18.6. System.Text.Json. Серіалізація та десеріалізація Текстові та бінарні потоки з попередніх розділів вирішують питання як зберегти байти. Але сучасний застосунок рідко оперує сирими байтами — він оперує об'є
18.6. System.Text.Json. Серіалізація та десеріалізація
Текстові та бінарні потоки з попередніх розділів вирішують питання як зберегти байти. Але сучасний застосунок рідко оперує сирими байтами — він оперує об'єктами: пацієнтами, аналізами, рецептами, планами лікування. Зберегти об'єкт C# у файл або передати через мережу означає його серіалізувати — перетворити граф об'єктів у послідовність байтів. Зворотний процес — десеріалізація: відновити об'єкти зі збереженого представлення.
Найпоширеніший формат для серіалізації у сучасних застосунках — JSON (JavaScript Object Notation). Він людиночитабельний, підтримується всіма мовами і платформами, і є стандартом де-факто для REST API, конфігурацій та обміну даними між сервісами.
.NET 5+ включає System.Text.Json — вбудовану бібліотеку серіалізації JSON, оптимізовану для продуктивності. Вона замінила сторонній Newtonsoft.Json (Json.NET) як основний інструмент для більшості задач.

JsonSerializer — базова серіалізація та десеріалізація
Центральний клас бібліотеки — JsonSerializer. Два основних методи: Serialize (об'єкт → рядок JSON) і Deserialize (рядок JSON → об'єкт).
JsonSerializer.Serialize без опцій генерує компактний JSON без пробілів — це оптимально для мережевої передачі. WriteIndented = true додає відступи для читабельності — зручно для конфігурацій і логів.
Серіалізація до файлу та з файлу
Найчастіший сценарій — збереження об'єктів у файл і завантаження з файлу. JsonSerializer інтегрується зі Stream:
Передача Stream у JsonSerializer.Serialize/Deserialize ефективніша за string-варіант: бібліотека пише напряму у потік без проміжного рядкового буфера — важливо для великих об'єктів.
JsonSerializerOptions — налаштування серіалізації
JsonSerializerOptions — центральний об'єкт конфігурації, що контролює практично всі аспекти серіалізації:
Типові JsonSerializerOptions для медичного застосунку
Атрибути керування серіалізацією
System.Text.Json надає атрибути для тонкого контролю над кожним полем і класом:
| Атрибут | Призначення |
|---|---|
[JsonPropertyName("name")] |
Задає ім'я поля у JSON |
[JsonIgnore] |
Виключає поле з серіалізації |
[JsonIgnore(Condition = ...)] |
Умовне виключення (null, default) |
[JsonPropertyOrder(n)] |
Порядок полів у виводі |
[JsonInclude] |
Включає публічне поле (field, не property) |
[JsonRequired] |
Поле обов'язкове при десеріалізації |
[JsonConverter(typeof(...))] |
Кастомний конвертер для типу |
Робота з вкладеними структурами та колекціями
Практичний сценарій: JSON-конфігурація медичного застосунку
