Как пользоваться
- Вставьте пример JSON. Берите реалистичный: чем больше элементов в массиве, тем точнее найдутся необязательные ключи.
- Выберите классы или record и решите, нужны ли атрибуты [JsonPropertyName].
- Скопируйте код в файл .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.