Novidades do .NET 8: serialização JSON nos formatos snake_case e kebab-case

Renato Groffe
3 min readNov 1, 2023

--

A plataforma .NET conta com o tipo JsonNamingPolicy, uma alternativa que integra o namespace System.Text.Json e que permite definir o uso do padrão camel case como formato para a serialização de dados no formato JSON. Isso acontece em conjunto com uma instância de JsonSerializerOptions, informada como parâmetro em chamadas do método Serialize de JsonSerializer.

O .NET 8 traz novas opções para serialização a partir de JsonNamingPolicy, suportando agora as convenções snake_case (com elementos de um identificador separados por “_” — underscore) e kebab-case (as partes de um identificador são separadas por “-” — hífen). É o que demonstrarei através de um exemplo prático disponível no GitHub:

https://github.com/renatogroffe/DotNet8-ConsoleApp-Serialization-Snake-Kebab

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

Na listagem a seguir temos a implementação do tipo Localidade. Conforme podemos observar, cada seção de um nome de propriedade se inicia por uma letra maiúscula (3 dessas propriedades têm na primeira parte de sua identificação o termo Nome):

Exemplos com diferentes formas de serialização de instâncias da classe Localidade estão em Program.cs:

  • Um array desse tipo com 2 instâncias (localidades) servirá de base para os testes;
  • O método estático PrintSerialization (linhas 29 a 31) receberá como parâmetros instâncias de Localidade e JsonNamingPolicy, exibindo no console o tipo correspondente à convenção de nome configurada e o resultado da serialização empregando tal padrão;
  • Dentro de um loop foreach será exibido um primeiro resultado de serialização, sem o uso de uma convenção de nomenclatura (linha 21). Para este caso específico serão mantidos os caracteres maiúsculos e minúsculos que se encontram nos identificadores de propriedades do tipo Localidade;
  • - Ainda no loop foreach será utilizada a notação CamelCase (linha 22), invocando-se para isto o método PrintSerialization. A primeira parte que identifica o nome iniciará com um caracter minúsculo, com os demais caracteres permanecendo como foram declarados previamente (maiúsculo ou minúsculo) nos nomes de propriedades;
  • Os valores SnakeCaseLower e SnakeCaseUpper farão uso da notação snake-case, com a conversão de todos os caracteres no primeiro caso para minúsculo (chamada na linha 23) e maiúsculo no segundo teste (acionamento na linha 24);
  • Já os valores KebabCaseLower (transformação em minúsculo na linha 25) e KebabCaseUpper (conversão para maiúsculo na linha 26) implicam na utilização da notação kebab_case.

Ao executar esta Console Application a partir do Visual Studio 2022 teremos como retorno:

Clique nesta imagem para visualizar com uma melhor resolução

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet