JSON обработка в C# (.NET): полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

JSON обработка в C# (.NET): полное руководство с примерами

JSON (JavaScript Object Notation) — один из самых популярных форматов обмена данными в современных веб-приложениях, API и конфигурационных файлах. В экосистеме .NET разработчикам доступны мощные инструменты для работы с JSON, которые позволяют легко сериализовать объекты в JSON и обратно. В этой статье мы подробно рассмотрим два основных подхода: встроенную библиотеку System.Text.Json (рекомендуется для .NET Core 3.0+ и .NET 5+) и популярную стороннюю библиотеку Newtonsoft.Json (также известную как Json.NET).

1. System.Text.Json — современный стандарт .NET

Начиная с .NET Core 3.0, Microsoft представила собственную высокопроизводительную библиотеку для работы с JSON — System.Text.Json. Она оптимизирована для минимального потребления памяти и высокой скорости, что делает её идеальным выбором для новых проектов.

1.1. Установка и импорт

Библиотека уже встроена в .NET 5/6/7/8/9, поэтому дополнительная установка не требуется. Для её использования достаточно подключить пространство имен:

using System.Text.Json;
using System.Text.Json.Serialization;

1.2. Базовая сериализация и десериализация

Рассмотрим простой пример: сериализация объекта в JSON и обратно.

// Определяем класс
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsEmployed { get; set; }
}

// Сериализация
var person = new Person { Name = "Иван", Age = 30, IsEmployed = true };
string json = JsonSerializer.Serialize(person);
Console.WriteLine(json); // {"Name":"Иван","Age":30,"IsEmployed":true}

// Десериализация
var deserializedPerson = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine(deserializedPerson.Name); // Иван

1.3. Работа с атрибутами

System.Text.Json поддерживает атрибуты для тонкой настройки сериализации:

public class Product
{
    [JsonPropertyName("product_id")]
    public int Id { get; set; }
    
    [JsonIgnore]
    public string InternalCode { get; set; }
    
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public ProductCategory Category { get; set; }
}

public enum ProductCategory
{
    Electronics,
    Clothing,
    Food
}

var product = new Product 
{ 
    Id = 101, 
    InternalCode = "SECRET", 
    Category = ProductCategory.Electronics 
};

string json = JsonSerializer.Serialize(product);
// {"product_id":101,"Category":"Electronics"}
// InternalCode не попал в JSON благодаря [JsonIgnore]

1.4. Параметры сериализации

Вы можете настроить поведение сериализатора через JsonSerializerOptions:

var options = new JsonSerializerOptions
{
    WriteIndented = true,           // Красивый вывод с отступами
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // camelCase для свойств
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // Игнорировать null
};

string prettyJson = JsonSerializer.Serialize(person, options);
Console.WriteLine(prettyJson);
/* Вывод:
{
  "name": "Иван",
  "age": 30,
  "isEmployed": true
}
*/

2. Newtonsoft.Json (Json.NET) — проверенный временем инструмент

До появления System.Text.Json, Newtonsoft.Json был де-факто стандартом для работы с JSON в .NET. Он предлагает более гибкие настройки и широкий набор функций, хотя и уступает в производительности.

2.1. Установка

Для использования Newtonsoft.Json необходимо установить NuGet-пакет:

// Через Package Manager Console:
Install-Package Newtonsoft.Json

// Или через .NET CLI:
dotnet add package Newtonsoft.Json

2.2. Базовая работа

using Newtonsoft.Json;

public class Order
{
    public int OrderId { get; set; }
    public decimal TotalAmount { get; set; }
    public DateTime CreatedAt { get; set; }
}

// Сериализация
var order = new Order 
{ 
    OrderId = 42, 
    TotalAmount = 1500.50m, 
    CreatedAt = DateTime.Now 
};
string json = JsonConvert.SerializeObject(order);
Console.WriteLine(json);

// Десериализация
var deserializedOrder = JsonConvert.DeserializeObject<Order>(json);
Console.WriteLine(deserializedOrder.OrderId); // 42

2.3. Расширенные возможности

Newtonsoft.Json предоставляет гибкие настройки через JsonSerializerSettings:

var settings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented,
    NullValueHandling = NullValueHandling.Ignore,
    DateFormatString = "yyyy-MM-dd",
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

string json = JsonConvert.SerializeObject(order, settings);
Console.WriteLine(json);
/* Вывод:
{
  "orderId":                    

Рекомендаций