Dicas sobre .NET: convertendo JSON para XML (e vice-versa)
Figurando entre os padrões mais comuns para o intercâmbio de informações, os formatos XML e JSON constituem presença praticamente certa ao se considerar a comunicação entre diferentes aplicações por meio de Web Services. Tal popularidade se deve, sem sombra de dúvidas, ao suporte que as principais plataformas de desenvolvimento da atualidade oferecem a estas especificações.
Nota-se inclusive que há no mercado uma maior preferência pelo padrão JSON, dada sua simplicidade e o menor volume de dados trafegado ao se escolher esta opção. Apesar de tudo isso, o formato XML continua a ser bastante utilizado em soluções corporativas.
Levando em conta os aspectos mencionados, um tipo de demanda extremamente comum em muitos sistemas consiste na conversão de valores JSON para o equivalente em XML e/ou vice-versa. Dentro da plataforma .NET isto pode ser conseguido sem grandes dificuldades através do uso do package Newtonsoft.Json (a imagem a seguir demostra esta biblioteca sendo adicionada a partir do utilitário NuGet, em um projeto do Visual Studio 2015):
Na listagem a seguir é possível observar a conversão de uma instância baseada em um tipo anônimo para uma string no formato JSON. O método SerializeObject da classe JsonConvert (namespace Newtonsoft.Json) será invocado, de maneira que se efetue a transformação do objeto associado à variável chamada “data”:
[code language=”csharp”]
…
var data = new
{
Data = new
{
Dia = 8,
Mes = 4,
Ano = 2016,
RepresentacaoTexto = “2016–04–08”,
Semestre = 1,
Trimestre = 1,
Estacao = “Outono”
}
};
string valorJSON = JsonConvert.SerializeObject(data);
…
[/code]
Já no próximo trecho de código há uma chamada ao método estático DeserializeXNode de JsonConvert. O resultado desta operação será uma instância do tipo XDocument (namespace System.Xml.Linq), contendo a representação XML do valor JSON informado como parâmetro:
[code language=”csharp”]
…
XDocument documentoXML =
JsonConvert.DeserializeXNode(valorJSON);
…
[/code]
O processo inverso foi detalhado na listagem a seguir, com a conversão de dados no formato XML para o valor correspondente no padrão JSON. Para isto foi acionado o método SerializeXNode da classe JsonConvert, repassando como parâmetro ao mesmo a instância do tipo XDocument gerada anteriormente:
[code language=”csharp”]
…
string valorFinal = JsonConvert.SerializeXNode(documentoXML);
…
[/code]
As diversas operações apresentadas neste artigo estão agrupadas na próxima listagem:
[code language=”csharp”]
using System;
using System.Xml.Linq;
using Newtonsoft.Json;
namespace TesteConversaoJSON_Xml
{
class Program
{
static void Main(string[] args)
{
var data = new
{
Data = new
{
Dia = 8,
Mes = 4,
Ano = 2016,
RepresentacaoTexto = “2016–04–08”,
Semestre = 1,
Trimestre = 1,
Estacao = “Outono”
}
};
string valorJSON = JsonConvert.SerializeObject(data);
Console.WriteLine($”Valor no formato JSON: {valorJSON}”);
XDocument documentoXML =
JsonConvert.DeserializeXNode(valorJSON);
Console.WriteLine(“\nValor convertido para XML:”);
Console.WriteLine(documentoXML.ToString());
string valorFinal = JsonConvert.SerializeXNode(documentoXML);
Console.WriteLine($”\nConvertendo de XML para JSON: {valorJSON}”);
Console.ReadKey();
}
}
}
[/code]
O resultado da execução de tais instruções pode ser visualizado na imagem a seguir:
E assim concluo este post, lembrando que informações adicionais sobre a biblioteca Newtonsoft.Json podem ser encontradas na seção de Referências.
Espero que este conteúdo tenha sido útil.
Até uma próxima oportunidade!
Referências
Converting between JSON and XML
http://www.newtonsoft.com/json/help/html/convertingjsonandxml.htm
JsonConvert Class
http://www.newtonsoft.com/json/help/html/t_newtonsoft_json_jsonconvert.htm