OOP Course
Сьогодні

Підрозділ 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) як основний інструмент для більшості задач.

Потік JSON-серіалізації в System.Text.Json

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-конфігурація медичного застосунку

Атрибути JSON та JsonSerializerOptions

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