JSON to C# Class

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

Попробовать пример
Имя корневого класса:

Ввод JSON

Вывод C#

Работает локально · Безопасно вставлять секреты
Классы C# появятся здесь…

Что такое конвертация JSON в C#?

Конвертация JSON в C# — это процесс генерации строго типизированных определений классов C# из JSON-данных. Когда .NET-приложение получает JSON из API, конфигурационного файла или очереди сообщений, ему нужны классы C# для десериализации этих данных в объекты. Писать такие классы вручную утомительно и чревато ошибками, особенно когда JSON содержит вложенные объекты, массивы и смешанные типы.

Генератор классов C# из JSON анализирует структуру и значения вашего 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 в 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
Создавайте классы моделей для параметров методов действий. Когда ваш эндпоинт принимает тело JSON, сгенерированный класс обеспечивает автоматическую привязку модели и валидацию.
Azure Functions и Serverless
Создавайте входные и выходные привязки для Azure Functions, обрабатывающих JSON-сообщения из очередей, концентраторов событий или HTTP-триггеров.
Десериализация конфигурации
Преобразуйте секции appsettings.json или внешние конфигурационные файлы в типизированные классы опций C# для использования с IOptions'<'T'>' в dependency injection.
Заполнение БД и миграция данных
Превращайте JSON-файлы с фикстурами в объекты C# для начального заполнения данных Entity Framework, настройки интеграционных тестов или скриптов миграции данных.
Изучение системы типов C#
Студенты и разработчики, только знакомящиеся с .NET, могут увидеть, как типы JSON соответствуют типам C#, разобраться с аксессорами свойств и узнать об атрибутах сериализации на практических примерах.

Справочник по сопоставлению типов JSON и C#

Каждый тип значения JSON соответствует определённому типу C#. Генератор анализирует реальные значения, чтобы выбрать наиболее точный тип. Например, число JSON без десятичной точки становится int, а 3.14 — double. Значения null дают object? (nullable ссылочный тип), поскольку реальный тип нельзя определить из null.

Тип JSONПримерТип C#
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
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
Оригинальная JSON-библиотека для .NET (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; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

Часто задаваемые вопросы

В чём разница между 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#?
Значение null в JSON даёт тип object?, потому что генератор не может определить предполагаемый тип из одного только null. После генерации следует заменить object? на правильный nullable-тип (string?, int? или конкретный класс?) на основе вашего знания схемы API.
Автоматически ли ключи JSON в camelCase сопоставляются со свойствами C# в PascalCase?
Да. Генератор преобразует ключи JSON вида "firstName" в свойства PascalCase — FirstName — и добавляет атрибут [JsonPropertyName("firstName")]. Это гарантирует, что сериализатор автоматически отображает два стиля именования в процессе сериализации и десериализации.
Как обрабатывать JSON с необязательными полями в C#?
Сделайте тип свойства nullable (например, string? или int?) и задайте значение по умолчанию. С System.Text.Json можно также настроить JsonSerializerOptions.DefaultIgnoreCondition для пропуска null-значений при сериализации. По умолчанию генератор создаёт non-nullable типы, поэтому проверьте и скорректируйте nullable-ть в соответствии с вашим контрактом API.