Novidades do .NET 8: serialização JSON nos formatos snake_case e kebab-case
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: