Конвертер JSON в классы C#

Генерируйте классы C# со свойствами и атрибутами JsonProperty из JSON, готовые для Newtonsoft.Json.

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

Десериализация JSON в .NET начинается с класса модели, свойства которого соответствуют данным. Конвертер напишет эти классы за вас: ключи в camelCase становятся свойствами в PascalCase с атрибутом [JsonProperty], хранящим исходный ключ, вложенные объекты — отдельными partial-классами, массивы — типизированными массивами, целые числа — long, а дробные — double. Также добавляются статический метод FromJson и метод расширения ToJson с настройками конвертеров для Newtonsoft.Json (Json.NET).

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

  1. Вставьте пример JSON — например, ответ API, который вызывает ваш сервис.
  2. Введите имя корневого класса, например Product.
  3. Установите NuGet-пакет Newtonsoft.Json, добавьте файл в проект, переименуйте пространство имён QuickType в своё и вызовите Product.FromJson(json).

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

Подходит ли это для System.Text.Json?
Атрибуты и вспомогательные методы рассчитаны на Newtonsoft.Json. Для System.Text.Json оставьте свойства, замените [JsonProperty] на [JsonPropertyName] из System.Text.Json.Serialization и десериализуйте через JsonSerializer.Deserialize<Product>(json).
Почему числа генерируются как long и double?
У чисел в JSON нет фиксированного размера, поэтому long и double защищают от неожиданных переполнений. Если этого требует предметная область, после копирования замените их на int или decimal — например, decimal для денежных сумм.
Почему классы объявлены как partial?
Partial-классы позволяют разместить сгенерированные свойства и метод FromJson в отдельных объявлениях, а также добавлять собственные члены в другом файле, не трогая сгенерированный.

Пример: JSON в C#

Исходный JSON

{
  "productId": 7,
  "title": "Mechanical Keyboard",
  "price": 129.99,
  "inStock": true,
  "tags": ["hardware", "usb-c"]
}

Сгенерированный код: C# (Product)

// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using QuickType;
//
//    var product = Product.FromJson(jsonString);

namespace QuickType
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class Product
    {
        [JsonProperty("productId")]
        public long ProductId { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }

        [JsonProperty("price")]
        public double Price { get; set; }

        [JsonProperty("inStock")]
        public bool InStock { get; set; }

        [JsonProperty("tags")]
        public string[] Tags { get; set; }
    }

    public partial class Product
    {
        public static Product FromJson(string json) => JsonConvert.DeserializeObject<Product>(json, QuickType.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this Product self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

Преобразовать JSON в другие языки