.NET + SQL Server 2017 - Parte 2: retornado consultas em JSON (exemplo com ASP.NET Core + Dapper)

Este artigo tem por objetivo demonstrar como consultas a bases do SQL Server 2017 podem ser retornadas no formato JSON, com isto acontecendo a partir de uma aplicação que emprega o ASP.NET Core 1.1 e o Dapper.

E por falar em tecnologias Microsoft, não deixem também de acompanhar o Azure Tech Nights, que acontecerá entre os dias 24 de Julho e 2 de Agosto de 2017. Será um evento NOTURNO, ONLINE e GRATUITO promovido pelo Canal .NET, com apresentações focadas no Microsoft Azure e cobrindo temas como microserviços, Bots, desenvolvimento Web e mobile, bancos de dados, Business Intelligence, NoSQL, infraestrutura, Containers e muito mais.
Entre os palestrantes teremos MVPs Microsoft, MTACs e Especialistas de Mercado.
Para efetuar a inscrição acessem este link.
A grade com as palestras e outras informações podem ser encontradas no site oficial do Azure Tech Nights.

Introdução

No primeiro artigo desta série abordei o uso do SQL Server 2017 a partir de um container Docker. Caso tenha interesse em saber mais a respeito ou, até mesmo, rever este conteúdo acesse o seguinte link:

.NET + SQL Server 2017 - Parte 1: executando o SQL Server em um container Docker

Neste novo post será abordado o uso da cláusula for FOR JSON em queries no SQL Server 2017. Essa funcionalidade permite que os resultados de consultas a um banco de dados sejam devolvidos no padrão JSON, além de contar com meios para customizar tal retorno.


Criando a base de dados

Uma tabela chamada Cotacoes será criada e populada com base no script detalhado na listagem a seguir. Essa estrutura armazenará as cotações mais recentes de moedas como o dólar norte-americano, o euro e a libra esterlina:

Uma consulta simples a esta tabela produzirá o seguinte resultado:

OBSERVAÇÃO: para os diferentes testes descritos neste artigo foi utilizada uma instância do SQL Server 2017 executando através de um container Docker.


Testando o uso da cláusula FOR JSON

Neste primeiro exemplo será utilizada a cláusula FOR JSON em conjunto com o modo AUTO:

  • Valores nulos são ignorados por default (a não ser que se especifique o parâmetro INCLUDE_NULL_VALUES);
  • A estrutura dos dados retornados via SELECT determinará o formato do valor JSON produzido como resultado.

Ao executar esta query aparecerá o seguinte resultado no SQL Server Management Studio:

A listagem a seguir traz o valor JSON produzido como resultado:

Já o modo PATH permite que se customize o JSON retornado. Valores podem ser agrupados em diferentes níveis, bastando para isto indicá-los como um alias para os campos especificados em um SELECT (cada nível estará separado por um ponto). O próximo exemplo demonstra um uso desta alternativa:

O valor JSON gerado como resultado está na listagem a seguir:

É possível ainda adicionar um elemento no início do JSON ao utilizar o modo PATH, agrupando assim todos os valores retornados via query. Isto acontecerá por meio da opção ROOT:

O JSON produzido por esta instrução pode ser observado na próxima listagem:


Exemplo de utilização com ASP.NET Core 1.1 e Dapper

O código-fonte da aplicação descrita nesta seção já está disponível no GitHub. Trata-se de uma API REST implementada com o ASP.NET Core 1.1, sendo que a mesma possibilitará a consulta às cotações cadastradas na base de exemplo:

https://github.com/renatogroffe/ASPNETCore_SQLServer2017

Foram adicionados a este projeto os packages do Dapper e do provider ADO.NET para SQL Server (System.Data.SqlClient):

O método Get na classe CotacoesController será responsável pelo tratamento de requisições HTTP enviadas a esta aplicação de testes:

  • A expressão SQL informada ao método QueryFirst do Dapper retornará uma string JSON. Essa instrução está empregando a cláusula FOR JSON, além do modo AUTO e da opção ROOT;
  • O valor retornado será repassado então ao método Content, de forma que a Action produza como resultado um documento JSON a partir do conteúdo associado à variável valorJSON.

As próximas imagens trazem o retorno gerado pela API ao ser acessada via browser (no caso, o Mozilla Firefox):


One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.