Introdução ao Trabalho com JSON em C#
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados amplamente utilizado em aplicações web modernas, APIs e arquivos de configuração. Para um desenvolvedor C#, a capacidade de trabalhar com JSON é uma habilidade essencial, especialmente ao construir clientes REST, microsserviços ou aplicações que interagem com fontes de dados externas.
No ecossistema .NET, existem duas abordagens principais para processar JSON: a biblioteca clássica Newtonsoft.Json (também conhecida como Json.NET) e a biblioteca moderna nativa System.Text.Json, introduzida no .NET Core 3.0 e tornando-se o padrão no .NET 5+. Ambas as bibliotecas permitem realizar duas operações-chave: serialização (converter um objeto C# para uma string JSON) e desserialização (converter uma string JSON de volta para um objeto C#).
Neste artigo, examinaremos detalhadamente ambas as abordagens, aprenderemos a analisar estruturas de dados complexas e revisaremos as melhores práticas para trabalhar com JSON em C#.
1. Operações Básicas: Serialização e Desserialização
1.1 Usando Newtonsoft.Json (Json.NET)
O Newtonsoft.Json tem sido o padrão de facto para trabalhar com JSON no .NET por muitos anos. Para começar, instale o pacote via NuGet:
Install-Package Newtonsoft.JsonVamos considerar uma classe de exemplo simples:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public bool IsActive { get; set; }}Serializando um objeto para JSON:
using Newtonsoft.Json;
User user = new User{ Id = 1, Name = "Ivan Petrov", Email = "ivan@example.com", IsActive = true};
string json = JsonConvert.SerializeObject(user, Formatting.Indented);Console.WriteLine(json);Resultado da execução:
{ "Id": 1, "Name": "Ivan Petrov", "Email": "ivan@example.com", "IsActive": true}Desserializando JSON de volta para um objeto:
string jsonString = @"{""Id"":1,""Name"":""Ivan Petrov"",""Email"":""ivan@example.com"",""IsActive"":true}";User deserializedUser = JsonConvert.DeserializeObject<User>(jsonString);Console.WriteLine($"User: {deserializedUser.Name}, Email: {deserializedUser.Email}");1.2 Usando System.Text.Json
A partir do .NET Core 3.0, a Microsoft introduziu sua própria biblioteca System.Text.Json, que é otimizada para desempenho e não requer dependências externas.
Serialização:
using System.Text.Json;
User user = new User{ Id = 2, Name = "Maria Smirnova", Email = "maria@example.com", IsActive = false};
string json = JsonSerializer.Serialize(user, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);Desserialização:
string jsonString = @"{""Id"":2,""Name"":""Maria Smirnova"",""Email"":""maria@example.com"",""IsActive"":false}";User deserializedUser = JsonSerializer.Deserialize<User>(jsonString);Console.WriteLine($"User: {deserializedUser.Name}");2. Trabalhando com Estruturas de Dados Complexas
2.1 Objetos Aninhados e Coleções
O JSON frequentemente contém estruturas aninhadas. Vamos considerar um exemplo com um array de pedidos de um usuário:
public class Order{ public int OrderId { get; set; } public decimal Amount { get; set; } public List<string> Items { get; set; }}
public class Customer{ public int CustomerId { get; set; } public string FullName { get; set; } public List<Order> Orders { get; set; }}Desserializando JSON complexo