Introdução ao trabalho com JSON em C#
JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em desenvolvimento web, arquivos de configuração e APIs. Se você está começando a estudar C# e .NET, saber trabalhar com JSON é uma habilidade obrigatória. Neste artigo, vamos abordar como realizar o parsing de JSON (conversão de string em objeto) e a serialização (conversão de objeto em string JSON) usando as ferramentas nativas do .NET e a popular biblioteca Newtonsoft.Json.
Vamos explorar exemplos práticos que ajudarão você a dominar rapidamente os conceitos-chave. Todo o código é escrito em C# (.NET 6+), mas funcionará em versões anteriores com alterações mínimas.
1. Trabalho nativo com JSON: namespace System.Text.Json
A partir do .NET Core 3.0, a Microsoft introduziu o namespace de alto desempenho System.Text.Json. Ele é integrado à plataforma e não requer a instalação de pacotes adicionais. Esta é a ferramenta principal para trabalhar com JSON em aplicações .NET modernas.
1.1 Serialização de objeto para JSON
Serialização é o processo de converter um objeto C# em uma string JSON. Vamos considerar uma classe simples Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
// Usovar person = new Person{ Name = "João Silva", Age = 30, Email = "joao@example.com"};
string json = System.Text.Json.JsonSerializer.Serialize(person);Console.WriteLine(json);Resultado da execução:
{"Name":"João Silva","Age":30,"Email":"joao@example.com"}Por padrão, as propriedades são serializadas com nomes idênticos aos nomes das propriedades em C#. Você pode configurar a formatação usando JsonSerializerOptions, por exemplo, para tornar o JSON mais legível:
var options = new System.Text.Json.JsonSerializerOptions{ WriteIndented = true};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);Agora a saída será com indentação:
{ "Name": "João Silva", "Age": 30, "Email": "joao@example.com"}1.2 Desserialização (parsing) de JSON para objeto
O processo inverso — converter uma string JSON em um objeto C# — é chamado de desserialização. Use o método JsonSerializer.Deserialize<T>():
string jsonString = @"{""Name"":""Maria Pereira"",""Age"":25,""Email"":""maria@example.com""}";
Person? person = System.Text.Json.JsonSerializer.Deserialize<Person>(jsonString);
if (person != null){ Console.WriteLine($"Nome: {person.Name}, Idade: {person.Age}");}Importante: se o JSON não corresponder à estrutura da classe, uma exceção JsonException será lançada. Para um trabalho seguro, use tratamento de exceções ou verifique se é null.
1.3 Trabalhando com JsonDocument para JSON arbitrário
Às vezes, a estrutura do JSON não é conhecida antecipadamente ou você deseja ler dados sem criar classes. Para isso, use JsonDocument:
string jsonText = @"{""product"":""Notebook"",""price"":75000,""inStock"":true}";
using JsonDocument doc = JsonDocument.Parse(jsonText);JsonElement root = doc.RootElement;
string product = root.GetProperty("product").GetString();int price = root.GetProperty("price").GetInt32();bool inStock = root.GetProperty("inStock").GetBoolean();
Console.WriteLine($"{product}: {price} reais (em estoque: {inStock})");JsonDocument implementa IDisposable, portanto, use obrigatoriamente using para liberar recursos.
2. Biblioteca clássica Newtonsoft.Json (Json.NET)
Antes do surgimento do System.Text.