JSON (JavaScript Object Notation) é um formato leve de troca de dados comumente usado em aplicações web. C# oferece diversas maneiras de analisar dados JSON de forma eficiente, simplificando a integração com APIs web e outros sistemas baseados em JSON. Este artigo explora três métodos populares, destacando seus pontos fortes e fracos.
Sumário
- Analisando JSON com JsonConvert.DeserializeObject()
- Análise JSON Dinâmica com JObject.Parse()
- Usando JavaScriptSerializer().Deserialize()
Analisando JSON com JsonConvert.DeserializeObject()
A biblioteca Newtonsoft.Json
é uma biblioteca JSON amplamente utilizada e de alto desempenho para .NET. Ela oferece o método JsonConvert.DeserializeObject()
para análise eficiente de JSON. Você precisará instalá-la via NuGet Package Manager (“Newtonsoft.Json”).
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""John Doe"",
""Age"": 30,
""City"": ""New York""
}";
Person person = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
Este código define uma classe Person
que corresponde à estrutura JSON. JsonConvert.DeserializeObject<Person>(jsonString)
desserializa o JSON em um objeto Person
, permitindo acesso fácil às suas propriedades. Esta é geralmente a abordagem mais eficiente e rica em recursos.
Análise JSON Dinâmica com JObject.Parse()
Também utilizando Newtonsoft.Json
, o método JObject.Parse()
fornece análise dinâmica. Isso é benéfico quando a estrutura JSON é desconhecida ou requer acesso flexível às propriedades.
using Newtonsoft.Json.Linq;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Jane Doe"",
""Age"": 25,
""City"": ""London"",
""Address"": {
""Street"": ""123 Main St"",
""Zip"": ""10001""
}
}";
JObject jObject = JObject.Parse(jsonString);
string name = (string)jObject["Name"];
int age = (int)jObject["Age"];
string city = (string)jObject["City"];
string street = (string)jObject["Address"]["Street"];
Console.WriteLine($"Name: {name}");
Console.WriteLine($"Age: {age}");
Console.WriteLine($"City: {city}");
Console.WriteLine($"Street: {street}");
}
}
JObject.Parse()
cria um JObject
. As propriedades são acessadas usando indexadores, permitindo acesso a objetos aninhados. A conversão de tipos é crucial para recuperar os valores corretamente.
Usando JavaScriptSerializer().Deserialize()
O JavaScriptSerializer
integrado (System.Web.Script.Serialization
) oferece uma alternativa mais simples. No entanto, geralmente é menos eficiente que Newtonsoft.Json
e possui menos recursos. É incluído por completude, mas deve ser evitado em aplicações de produção.
using System.Web.Script.Serialization;
public class Example
{
public static void Main(string[] args)
{
string jsonString = @"{
""Name"": ""Peter Jones"",
""Age"": 40,
""City"": ""Paris""
}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
Person person = serializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}");
Console.WriteLine($"Age: {person.Age}");
Console.WriteLine($"City: {person.City}");
}
}
Isso usa JavaScriptSerializer.Deserialize<Person>()
. Observe que você pode precisar adicionar uma referência a System.Web.Extensions
dependendo do seu projeto.
Em resumo, JsonConvert.DeserializeObject()
do Newtonsoft.Json
é recomendado por seu desempenho e recursos. JObject.Parse()
oferece flexibilidade, enquanto JavaScriptSerializer()
fornece uma alternativa básica. Escolha o método mais adequado às suas necessidades. Sempre trate possíveis exceções (como JsonReaderException
) no código de produção.