Introdução ao Trabalho com JSON em C#
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que se tornou o padrão para comunicação entre serviços web, arquivos de configuração e APIs. No ecossistema C# (.NET), trabalhar com JSON é uma das tarefas básicas que todo desenvolvedor encontra. Neste artigo, examinaremos detalhadamente como realizar a análise (desserialização) e serialização de dados em C#, usando tanto a biblioteca nativa System.Text.Json quanto a popular biblioteca de terceiros Newtonsoft.Json.
Você aprenderá como converter objetos C# para strings JSON e vice-versa, como trabalhar com estruturas aninhadas e quais armadilhas pode encontrar na prática. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que desejam sistematizar seus conhecimentos.
Serialização de Objetos C# para JSON
Serialização é o processo de converter um objeto C# (ou outra estrutura de dados) em uma string no formato JSON. No .NET, existem várias abordagens para isso. Vamos analisar duas principais: System.Text.Json (recomendado pela Microsoft) e Newtonsoft.Json (legado, mas ainda amplamente utilizado).
Serialização usando System.Text.Json
A partir do .NET Core 3.0, a Microsoft introduziu sua própria biblioteca para trabalhar com JSON — System.Text.Json. Ela é caracterizada por alto desempenho e consumo mínimo de memória. O método JsonSerializer.Serialize() é usado para serialização.
using System;using System.Text.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Ivan Petrov", Age = 30, Email = "ivan@example.com" };
string json = JsonSerializer.Serialize(person); Console.WriteLine(json); }}Resultado da execução:
{"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}Serialização usando Newtonsoft.Json
A biblioteca Newtonsoft.Json (também conhecida como Json.NET) foi o padrão de facto por muito tempo. Ela oferece mais flexibilidade e configurações do que a solução nativa. Para usá-la, é necessário instalar o pacote NuGet Newtonsoft.Json.
using System;using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Maria Sidorova", Age = 25, Email = "maria@example.com" };
string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); }}O resultado será semelhante, mas o Newtonsoft.Json por padrão usa a notação camelCase para nomes de propriedades, se configurado.
Configuração de Serialização
Em ambas as bibliotecas, você pode controlar o formato de saída: ignorar valores nulos, usar CamelCase, formatar JSON com indentação, etc.
Exemplo para System.Text.Json com configurações:
var options = new JsonSerializerOptions{ WriteIndented = true, // Saída formatada com indentação PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // Notação CamelCase DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // Ignorar nulos};
string json = JsonSerializer.Serialize(person, options);Análise (Desserialização) de JSON em C#
Desserialização é o processo inverso: converter uma string JSON em um objeto C#. Isso é necessário ao receber dados de uma API, ler arquivos de configuração