Serializando objetos com o Protobuf no .NET

O Protobuf é um padrão de serialização e desserialização de dados fornecido pelo Google (e também utilizado no gRPC). O grande destaque do Protobuf é ser mais leve e performático nas operações comparado com JSON e XML.

Os Protocol Buffers são um formato de armazenamento de dados estruturado portátil e eficiente. As mensagens são serializadas em um formato binary wire que é muito compacto, sendo extensível como protocolo de comunicação e armazenamento de dados.

Vantagens

  • Processamento muito rápido
  • Muito útil para comunicação entre APIs
  • Fácil Interoperabilidade entre linguagens

Desvantagens

  • Legibilidade não humana: JSON, trocado em formato de texto e com estrutura simples, é fácil de ser lido e analisado por humanos, porém este não é o caso do Protobuf.
  • Pouco popular na comunidade.

Neste artigo, aprenderemos como configurar e utilizar o Protobuf no .NET 6.0, seguindo as boas práticas e dicas para manter o código performático.

Pré-requisitos

API

Na classe program.cs da API, configure conforme o código abaixo:

O próximo passo é criar a classe Person com os mapeamentos do Protobuf:

  • [ProtoContract]: Indica que a classe será serializada utilizando o Protobuf.
  • [ProtoMember]: Indica que a propriedade deverá ser serializada utilizando o Protobuf.
  • [ProtoIgnore]: indica que a propriedade será ignorada quando uma serialização ocorrer.

Para facilitar as chamadas ao Protobuf, crie uma classe de extensão com o nome de ProtoBufExtensions e insira o seguinte código:

Em seguida, crie uma controller com o nome de ProtobufController e insira o código abaixo para testes:

Testando

Para realizar os testes, execute o endpoint POST /serialize no Swagger e verifique o resultado da coleta de logs (conforme imagem abaixo). Em seguida execute o endpoint POST /deserialize passando o texto da serialização em Protobuf para realizar a conversão para objeto C#

Finalizando

O Protobuf foi feito para ser extremamente rápido, mais leve e consequentemente mais performático do que outros protocolos. Mesmo sendo pouco popular, utilize sempre que desenvolver APIs com comunicações internas e executar serialização/desserialização.

Os detalhes completos deste exemplo você encontra no meu GitHubhttps://github.com/hgmauri/sample-protobuf

Deixe uma resposta