Конвертація JSON у C# — це процес генерації строго типізованих визначень класів C# з даних JSON. Коли .NET-застосунок отримує JSON від API, конфігураційного файлу або черги повідомлень, йому потрібні класи C# для десеріалізації цих даних в об'єкти. Написання таких класів вручну є нудним і схильним до помилок, особливо коли JSON містить вкладені об'єкти, масиви та змішані типи.
Генератор класів JSON to C# аналізує структуру й значення вашого JSON, визначає відповідний тип C# для кожного поля та створює визначення класів з аксесорами властивостей і атрибутами серіалізації. Результат відповідає угодам іменування .NET: назви властивостей у PascalCase, атрибути JsonPropertyName для відображення на оригінальні ключі JSON у camelCase або snake_case, а також правильне використання List'<'T'>' для масивів.
Ця конвертація особливо поширена у веб-API ASP.NET Core, Azure Functions і будь-яких .NET-сервісах, що споживають зовнішні JSON-дані. Замість використання dynamic або Dictionary'<'string, object'>', типізовані класи забезпечують безпеку на етапі компіляції, підтримку IntelliSense та захист від друкарських помилок у назвах полів, які інакше виявлялися б лише під час виконання. Вставте ваш JSON в цей інструмент і отримайте готові до використання класи C# миттєво.
Навіщо використовувати генератор JSON to C#?
Написання класів моделей C# вручну за зразками JSON займає час і призводить до людських помилок. Генератор бере на себе шаблонну роботу, дозволяючи зосередитися на бізнес-логіці.
⚡
Миттєва генерація класів
Вставте ваш JSON і отримайте повні класи C# менш ніж за секунду. Жодного ручного введення властивостей, жодного пропущеного поля.
🔒
Конфіденційність даних
Вся конвертація виконується у вашому браузері. Ваші JSON-дані ніколи не залишають ваш пристрій, тому API-ключі, токени та персональні дані залишаються приватними.
📋
Правильне відображення атрибутів
Згенеровані класи містять атрибути JsonPropertyName, що відображають властивості C# у PascalCase на оригінальні назви ключів JSON, запобігаючи невідповідностям при десеріалізації.
🌐
Без облікового запису та встановлення
Відкрийте сторінку й вставте ваш JSON. Жодних NuGet-пакетів для встановлення, жодних розширень Visual Studio для налаштування, жодних форм реєстрації.
Сценарії використання JSON to C#
Інтеграція бекенд-API
Генеруйте моделі запитів і відповідей для сторонніх REST API. Вставте зразок JSON з документації API й отримайте готові до використання класи C# для викликів HttpClient.
Контролери ASP.NET Core
Створюйте класи моделей для параметрів методів дій. Коли ваш endpoint приймає тіло JSON, згенерований клас забезпечує автоматичне прив'язування моделі та перевірку.
Azure Functions та Serverless
Будуйте вхідні й вихідні прив'язки для Azure Functions, що обробляють JSON-повідомлення з черг, event hubs або HTTP-тригерів.
Десеріалізація конфігурацій
Конвертуйте секції appsettings.json або зовнішні конфігураційні файли у типізовані класи параметрів C# для використання з IOptions'<'T'>' у впровадженні залежностей.
Наповнення та міграція бази даних
Перетворюйте JSON-файли фікстур на об'єкти C# для початкових даних Entity Framework, налаштування інтеграційних тестів або скриптів міграції даних.
Вивчення системи типів C#
Студенти та розробники, що лише починають знайомство з .NET, можуть побачити, як типи JSON відображаються на типи C#, зрозуміти аксесори властивостей і навчитися атрибутам серіалізації на практиці.
Таблиця відповідності типів JSON та C#
Кожен тип значення JSON відображається на конкретний тип C#. Генератор аналізує реальні значення, щоб обрати найточніший тип. Наприклад, JSON-число без десяткової крапки стає int, тоді як 3.14 стає double. Значення null дає object? (тип посилання, що допускає null), оскільки реальний тип неможливо визначити лише з null.
Тип JSON
Приклад
Тип C#
string
"hello"
string
number (int)
42
int
number (float)
3.14
double
boolean
true, false
bool
null
null
object?
object
{"key": "value"}
nested class
array
[1, 2, 3]
List<int>
array of objects
[{"id": 1}]
List<ClassName>
System.Text.Json vs Newtonsoft.Json
.NET має дві основні бібліотеки серіалізації JSON. Згенеровані цим інструментом класи використовують атрибути System.Text.Json (JsonPropertyName) — вбудований варіант, доступний починаючи з .NET Core 3.0. Якщо ваш проект використовує Newtonsoft.Json, ви можете замінити атрибути.
System.Text.Json
Вбудовано у .NET починаючи з Core 3.0. Швидший і використовує менше пам'яті, ніж Newtonsoft. Використовує [JsonPropertyName] для відображення властивостей. Стандартний вибір для нових проектів .NET 6+. Не підтримує всі функції Newtonsoft, як-от JsonPath або обробку посилань, з коробки.
Newtonsoft.Json
Оригінальна .NET-бібліотека JSON (Json.NET). Використовує [JsonProperty] для відображення властивостей. Підтримує складніші сценарії: поліморфну серіалізацію, запити JsonPath, користувацькі конвертери з більшою гнучкістю. Досі поширена у застарілих кодових базах і проектах, що потребують функцій, яких бракує System.Text.Json.
Приклади коду
Ці приклади показують, як визначати й використовувати класи C#, згенеровані з JSON, із використанням обох основних бібліотек серіалізації, а також автоматизацію генерації з командного рядка.
C# (System.Text.Json)
using System.Text.Json;
var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"
public class User
{
[JsonPropertyName("id")]
public int Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
[JsonPropertyName("active")]
public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;
var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98
public class User
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("scores")]
public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs
// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp
// Output:
// public class Root
// {
// [JsonPropertyName("id")]
// public int Id { get; set; }
//
// [JsonPropertyName("name")]
// public string Name { get; set; }
// }
В чому різниця між JsonPropertyName та JsonProperty?
JsonPropertyName — це атрибут із System.Text.Json, вбудованого серіалізатора .NET. JsonProperty — з Newtonsoft.Json (Json.NET), сторонньої бібліотеки. Обидва відображають назву властивості C# на назву поля JSON, але належать до різних просторів імен і не є взаємозамінними. Використовуйте JsonPropertyName для нових проектів .NET 6+, а JsonProperty — якщо ваш проект вже залежить від Newtonsoft.
Як генератор обробляє вкладені JSON-об'єкти?
Кожен вкладений об'єкт стає власним класом C#. Властивість у батьківському класі використовує вкладений клас як свій тип. Наприклад, якщо ваш JSON має поле "address", що містить об'єкт з "street" і "city", генератор створює клас Address і типізує властивість як Address у батьківському класі.
Що відбувається з масивами JSON, що містять змішані типи?
Генератор визначає тип елемента масиву за першим ненульовим елементом. Якщо масив містить змішані типи (рядки й числа разом), згенерований тип повертається до List'<'object'>'. На практиці добре структуровані відповіді API рідко змішують типи в межах одного масиву.
Чи можна використовувати згенеровані класи з Entity Framework?
Так, але вам потрібно додати специфічні для EF анотації, як-от атрибути [Key], [Required] або [Column]. Згенеровані класи дають вам структуру властивостей; ставтесь до них як до каркасу й додавайте конфігурацію EF поверх. EF також очікує конструктор без параметрів, який у згенерованих класів вже є за замовчуванням.
Як значення null у JSON перетворюються на C#?
Значення JSON null дає тип object?, оскільки генератор не може визначити призначений тип лише з null. Після генерації слід замінити object? на правильний тип, що допускає null (string?, int? або конкретний клас?) на основі вашого знання схеми API.
Чи автоматично відображається JSON у camelCase на властивості C# у PascalCase?
Так. Генератор перетворює ключі JSON на кшталт "firstName" на властивості PascalCase, як-от FirstName, і додає атрибут [JsonPropertyName("firstName")]. Це гарантує, що серіалізатор автоматично відображає між двома угодами іменування під час серіалізації та десеріалізації.
Як обробляти JSON з опціональними полями в C#?
Зробіть тип властивості таким, що допускає null (наприклад, string? або int?), і встановіть значення за замовчуванням. З System.Text.Json ви також можете налаштувати JsonSerializerOptions.DefaultIgnoreCondition для пропуску значень null під час серіалізації. Генератор за замовчуванням створює типи, що не допускають null, тому перегляньте й скоригуйте допустимість null відповідно до вашого контракту API.