Processamento JSON em C# (.NET): Guia Completo
JSON (JavaScript Object Notation) é um formato leve de troca de dados que se tornou padrão para APIs web e arquivos de configuração. No ecossistema C# (.NET), existem duas principais ferramentas para trabalhar com JSON: a consagrada biblioteca Newtonsoft.Json (também conhecida como Json.NET) e a moderna biblioteca integrada System.Text.Json, introduzida no .NET Core 3.0. Neste artigo, abordaremos detalhadamente ambas as bibliotecas, suas funcionalidades e exemplos de uso.
1. Newtonsoft.Json (Json.NET)
Newtonsoft.Json é o padrão de facto para trabalhar com JSON em C# há muitos anos. Ela oferece funcionalidades robustas, incluindo serialização flexível, suporte a LINQ to JSON e trabalho com tipos dinâmicos.
Instalação
Para instalar via NuGet Package Manager, execute o comando:
Install-Package Newtonsoft.JsonOu via .NET CLI:
dotnet add package Newtonsoft.JsonOperações básicas: serialização e desserialização
Serialização é a conversão de um objeto C# em uma string JSON. Desserialização é o processo inverso.
using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public List<string> Hobbies { get; set; }}
// SerializaçãoPerson person = new Person{ Name = "Alexey", Age = 30, Hobbies = new List<string> { "Programação", "Leitura", "Viagens" }};
string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);
// Desserializaçãostring jsonInput = @"{'Name':'Maria','Age':25,'Hobbies':['Desenho','Yoga']}";Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine($"Nome: {deserializedPerson.Name}, Idade: {deserializedPerson.Age}");Trabalhando com dados dinâmicos
Newtonsoft.Json suporta tipos dinâmicos, o que é útil ao lidar com estruturas JSON desconhecidas.
dynamic dynamicObject = JsonConvert.DeserializeObject("{'Name':'Ivan','Score':95.5}");Console.WriteLine($"Estudante: {dynamicObject.Name}, Nota: {dynamicObject.Score}");LINQ to JSON
A biblioteca fornece uma API poderosa para consultas a dados JSON usando LINQ.
using Newtonsoft.Json.Linq;
string json = @"{ 'users': [ {'name': 'Ana', 'age': 28}, {'name': 'Pedro', 'age': 35}, {'name': 'Helena', 'age': 22} ]}";
JObject obj = JObject.Parse(json);var youngUsers = obj["users"] .Where(u => (int)u["age"] < 30) .Select(u => (string)u["name"]);
foreach (var name in youngUsers){ Console.WriteLine(name); // Exibirá: Ana, Helena}2. System.Text.Json
System.Text.Json é uma biblioteca moderna da Microsoft, otimizada para desempenho e consumo mínimo de memória. Ela está integrada ao .NET e não requer instalação de pacotes adicionais.
Operações básicas
using System.Text.Json;using System.Text.Json.Serialization;
public class Product{ [JsonPropertyName("product_name")] public string Name { get; set; } public decimal Price { get; set; } [JsonIgnore] public string InternalCode { get; set; }}
// SerializaçãoProduct product = new Product{ Name = "Notebook", Price = 75000.50m, InternalCode = "INT-001"};
string json = JsonSerializer.Serialize(product, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// Desserializaçãostring jsonInput = @"{""product_name"":""Smartphone"",""Price"":45000.00}";Product deserializedProduct = JsonSerializer.Deserialize<Product>(jsonInput);Console.WriteLine($"Produto: {deserializedProduct.Name}, Preço: {deserializedProduct.Price}");