Генератор классов C# из JSON

Вставьте ответ API в JSON и получите типы C# для его десериализации. Выберите классы со свойствами get/set или позиционные record и оставьте атрибуты [JsonPropertyName], чтобы свойства в PascalCase точно совпадали с ключами JSON в System.Text.Json.

Генерировать

Работает в браузере: всё, что вы вводите, никуда не отправляется.

Как пользоваться

  1. Вставьте пример JSON. Берите реалистичный: чем больше элементов в массиве, тем точнее найдутся необязательные ключи.
  2. Выберите классы или record и решите, нужны ли атрибуты [JsonPropertyName].
  3. Скопируйте код в файл .cs. Тип верхнего уровня называется Root — переименуйте его под свою задачу.

Как это работает

Пример разбирается в «форму»: для каждого ключа — все типы, которые там встретились. Все объекты одного массива сливаются в один класс, поэтому ключ, который есть не во всех объектах, становится nullable.

  • Имена свойств — PascalCase из ключа: order_id → OrderId, first-name → FirstName, 2fa → N2fa.
  • Свойство не может называться так же, как его класс, поэтому ключ item внутри класса Item становится ItemValue.
  • Имена классов тоже берутся из ключей: items хранит List, customer становится Customer. Root идёт первым, вложенные классы — после него.
  • Если на верхнем уровне массив, комментарий подскажет тип для десериализации, например List.

Пример

{"items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} в виде классов без атрибутов даёт:

using System.Collections.Generic;

public class Root
{
    public List<Item> Items { get; set; } = new();
}

public class Item
{
    public string Sku { get; set; } = "";
    public string? Note { get; set; }
    public long? Qty { get; set; }
}

note один раз равен null, поэтому это string?. qty нет во втором элементе, поэтому это long?.

Советы

  • Проверьте числа, с которыми повезло примеру: цена 1290 во всех элементах даст long, хотя в реальных данных может быть 1290,50.
  • Десериализуйте так: JsonSerializer.Deserialize<Root>(json); для массива верхнего уровня возьмите тип из комментария.
  • Для других языков есть JSON в Java, JSON в TypeScript и JSON в Go.

Частые вопросы

Как типы JSON сопоставляются с C#?

Строки становятся string, true и false — bool, целые числа — long, остальные — double (смесь целых и дробных — double). Массивы становятся List<T>, объекты — отдельными классами, а место, где встречаются значения разных видов, — object?.

Когда свойство становится nullable?

Когда в примере там есть null или когда ключа нет в части объектов массива. Типы-значения получают ? (long?, bool?), ссылочные тоже (string?, List<T>?) — это соответствует nullable reference types, которые в новых проектах .NET включены по умолчанию.

Зачем инициализаторы = "" и = new()?

В классе ненулевая строка, список или вложенный объект не должны оставаться null, иначе компилятор выдаёт предупреждение CS8618. Поэтому строки начинаются с пустой строки, а списки и объекты — с new().

Нужны ли атрибуты?

System.Text.Json по умолчанию сравнивает имена с учётом регистра, и свойство OrderId не совпадёт с ключом order_id. [JsonPropertyName("order_id")] задаёт соответствие явно. Без атрибутов настройте PropertyNamingPolicy или PropertyNameCaseInsensitive в JsonSerializerOptions.

Какая версия C# нужна?

Для record и new() — C# 9 (.NET 5) и новее, для nullable-аннотаций — C# 8. Позиционные record десериализуются в System.Text.Json через конструктор.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.