Processamento JSON em C# (.NET): guia completo com exemplos
JSON (JavaScript Object Notation) é um dos formatos de troca de dados mais populares em aplicações web modernas, APIs e arquivos de configuração. No ecossistema .NET, os desenvolvedores têm acesso a ferramentas poderosas para trabalhar com JSON, que permitem serializar facilmente objetos para JSON e vice-versa. Neste artigo, vamos explorar detalhadamente duas abordagens principais: a biblioteca nativa System.Text.Json (recomendada para .NET Core 3.0+ e .NET 5+) e a popular biblioteca de terceiros Newtonsoft.Json (também conhecida como Json.NET).
1. System.Text.Json — o padrão moderno do .NET
A partir do .NET Core 3.0, a Microsoft apresentou sua própria biblioteca de alto desempenho para trabalhar com JSON — System.Text.Json. Ela é otimizada para consumo mínimo de memória e alta velocidade, tornando-se a escolha ideal para novos projetos.
1.1. Instalação e importação
A biblioteca já está incorporada no .NET 5/6/7/8/9, portanto não é necessária instalação adicional. Para usá-la, basta incluir o namespace:
using System.Text.Json;using System.Text.Json.Serialization;1.2. Serialização e desserialização básicas
Vamos considerar um exemplo simples: serialização de um objeto para JSON e vice-versa.
// Definindo a classepublic class Person{ public string Name { get; set; } public int Age { get; set; } public bool IsEmployed { get; set; }}
// Serializaçãovar person = new Person { Name = "Иван", Age = 30, IsEmployed = true };string json = JsonSerializer.Serialize(person);Console.WriteLine(json); // {"Name":"Иван","Age":30,"IsEmployed":true}
// Desserializaçãovar deserializedPerson = JsonSerializer.Deserialize<Person>(json);Console.WriteLine(deserializedPerson.Name); // Иван1.3. Trabalhando com atributos
O System.Text.Json suporta atributos para ajuste fino da serialização:
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 não foi incluído no JSON graças a [JsonIgnore]1.4. Opções de serialização
Você pode configurar o comportamento do serializador através de JsonSerializerOptions:
var options = new JsonSerializerOptions{ WriteIndented = true, // Saída formatada com indentação PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // camelCase para propriedades DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // Ignorar null};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);/* Saída:{ "name": "Иван", "age": 30, "isEmployed": true}*/2. Newtonsoft.Json (Json.NET) — uma ferramenta testada pelo tempo
Antes do surgimento do System.Text.Json, o Newtonsoft.Json era o padrão de facto para trabalhar com JSON no .NET. Ele oferece configurações mais flexíveis e um amplo conjunto de funcionalidades, embora seja inferior em desempenho.
2.1. Instalação
Para usar o Newtonsoft.Json, é necessário instalar o pacote NuGet:
// Via Package Manager Console:Install-Package Newtonsoft.Json
// Ou via .NET CLI:dotnet add package Newtonsoft.Json2.2. Trabalho básico
using Newtonsoft.Json;
public class Or