Processamento de JSON em C# (.NET): guia completo
JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em aplicações web, APIs e arquivos de configuração. No ecossistema C# (.NET), existem duas abordagens principais para trabalhar com JSON: a biblioteca clássica Newtonsoft.Json (também conhecida como Json.NET) e a moderna biblioteca embutida System.Text.Json, introduzida no .NET Core 3.0 e superiores. Neste artigo, abordaremos detalhadamente ambas as ferramentas, suas capacidades, sintaxe e melhores práticas.
1. Newtonsoft.Json (Json.NET)
A biblioteca Newtonsoft.Json foi por muito tempo o padrão de facto para trabalhar com JSON em C#. Ela oferece uma API rica, suporte a LINQ to JSON, configuração flexível de serialização e desserialização. Pode ser instalada via NuGet:
Install-Package Newtonsoft.Json1.1. Serialização e desserialização
As operações mais básicas são converter um objeto em JSON e vice-versa. Vamos considerar a classe Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}Serialização (objeto → JSON):
var person = new Person { Name = "Ivan", Age = 30, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);Desserialização (JSON → objeto):
string json = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@example.com""}";Person person = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine(person.Name); // Maria1.2. Trabalhando com JObject e JArray
A biblioteca Newtonsoft.Json suporta LINQ to JSON, permitindo acessar dinamicamente elementos JSON sem criar classes fortemente tipadas.
string json = @"{""products"":[{""id"":1,""name"":""Notebook""},{""id"":2,""name"":""Mouse""}]}";JObject obj = JObject.Parse(json);JArray products = (JArray)obj["products"];
foreach (var product in products){ int id = (int)product["id"]; string name = (string)product["name"]; Console.WriteLine($"ID: {id}, Name: {name}");}1.3. Atributos para configuração da serialização
Com atributos, é possível controlar os nomes das propriedades no JSON, ignorar campos, definir valores padrão e muito mais.
public class User{ [JsonProperty("user_name")] public string Name { get; set; }
[JsonIgnore] public string Password { get; set; }
[JsonProperty("registration_date")] public DateTime CreatedAt { get; set; }}
// Na serialização, Password será ignorado e Name se tornará "user_name"string json = JsonConvert.SerializeObject(user);2. System.Text.Json (biblioteca embutida do .NET)
A partir do .NET Core 3.0, a Microsoft apresentou sua própria biblioteca System.Text.Json, otimizada para desempenho e consumo mínimo de memória. Ela não requer a instalação de pacotes adicionais (exceto algumas extensões).
2.1. Serialização e desserialização
O trabalho com System.Text.Json é semelhante ao Newtonsoft.Json, mas possui algumas diferenças na sintaxe e no comportamento padrão (por exemplo, diferenciação de maiúsculas e minúsculas).
using System.Text.Json;
var person = new Person { Name = "Alexei", Age = 28, Email = "alex@example.com" };string json = JsonSerializer.Serialize(person, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// Desserializaçãostring jsonInput = @"{""Name"":""Olga"",""Age"":32,""Email"":""olga@example.com""}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonInput);Importante! Por padrão, o System.Text.Json é
Também na biblioteca
Wolverine para C# (.NET): guia completo com exemplos práticos
Cliente HTTP para Swift (iOS/macOS): melhores bibliotecas para trabalhar com rede
Criptografia em C# (.NET): criptografia e hash de dados
Trabalhando com CSV em Go (Golang): guia completo para encoding/csv
Parsing de HTML em PHP: DOMDocument, SimpleXML e cURL para Web Scraping