JSON обработка в C# (.NET): Полное руководство по Newtonsoft.Json и System.Text.Json

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

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

Начать курс

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

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

1. Newtonsoft.Json (Json.NET)

Newtonsoft.Json — это де-факто стандарт для работы с JSON в C# на протяжении многих лет. Она предлагает богатый функционал, включая гибкую сериализацию, поддержку LINQ to JSON и работу с динамическими типами.

Установка

Для установки через NuGet Package Manager выполните команду:

Install-Package Newtonsoft.Json

Или через .NET CLI:

dotnet add package Newtonsoft.Json

Базовые операции: сериализация и десериализация

Сериализация — это преобразование объекта C# в строку JSON. Десериализация — обратный процесс.

using Newtonsoft.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<string> Hobbies { get; set; }
}

// Сериализация
Person person = new Person
{
    Name = "Алексей",
    Age = 30,
    Hobbies = new List<string> { "Программирование", "Чтение", "Путешествия" }
};

string json = JsonConvert.SerializeObject(person, Formatting.Indented);
Console.WriteLine(json);

// Десериализация
string jsonInput = @"{'Name':'Мария','Age':25,'Hobbies':['Рисование','Йога']}";
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonInput);
Console.WriteLine($"Имя: {deserializedPerson.Name}, Возраст: {deserializedPerson.Age}");

Работа с динамическими данными

Newtonsoft.Json поддерживает динамические типы, что удобно при работе с неизвестной структурой JSON.

dynamic dynamicObject = JsonConvert.DeserializeObject("{'Name':'Иван','Score':95.5}");
Console.WriteLine($"Студент: {dynamicObject.Name}, Балл: {dynamicObject.Score}");

LINQ to JSON

Библиотека предоставляет мощный API для запросов к JSON-данным с использованием LINQ.

using Newtonsoft.Json.Linq;

string json = @"{
    'users': [
        {'name': 'Анна', 'age': 28},
        {'name': 'Петр', 'age': 35},
        {'name': 'Елена', 'age': 22}
    ]
}";

JObject obj = JObject.Parse(json);
var youngUsers = obj["users"]
    .Where(u => (int)u["age"] < 30)
    .Select(u => (string)u["name"]);

foreach (var name in youngUsers)
{
    Console.WriteLine(name); // Выведет: Анна, Елена
}

2. System.Text.Json

System.Text.Json — это современная библиотека от Microsoft, оптимизированная для производительности и минимального потребления памяти. Она встроена в .NET и не требует установки дополнительных пакетов.

Базовые операции

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

public class Product
{
    [JsonPropertyName("product_name")]
    public string Name { get; set; }
    
    public decimal Price { get; set; }
    
    [JsonIgnore]
    public string InternalCode { get; set; }
}

// Сериализация
Product product = new Product
{
    Name = "Ноутбук",
    Price = 75000.50m,
    InternalCode = "INT-001"
};

string json = JsonSerializer.Serialize(product, new JsonSerializerOptions 
{ 
    WriteIndented = true 
});
Console.WriteLine(json);

// Десериализация
string jsonInput = @"{""product_name"":""Смартфон"",""Price"":45000.00}";
Product deserializedProduct = JsonSerializer.Deserialize<Product>(jsonInput);
Console.WriteLine($"Товар: {deserializedProduct.Name}, Цена: {deserializedProduct.Price}");

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

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

  • [JsonPropertyName] — задаёт имя свойства в JSON
  • [JsonIgnore] — исключает свойство из сериализации
  • [JsonInclude] — включает приватные поля в сериализацию
  • [JsonConverter] — позволяет использовать пользовательский конвертер

Работа с документами JSON

System.Text.Json включает JsonDocument для эффективного чтения больших JSON-файлов без полной десериализации.

using System.Text.Json;

string json = @                    

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