json-xml-00

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):

json-xml-01

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”:

...

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);

...

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:

...

XDocument documentoXML =
    JsonConvert.DeserializeXNode(valorJSON);

...

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:

...

string valorFinal = JsonConvert.SerializeXNode(documentoXML);

...

As diversas operações apresentadas neste artigo estão agrupadas na próxima listagem:

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();
        }
    }
}

O resultado da execução de tais instruções pode ser visualizado na imagem a seguir:

json-xml-02

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

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios