Sobre o projeto
# MessagePack para C# (.NET Framework, .NET 8, Unity, Xamarin)
MessagePack para C# é um serializador MessagePack extremamente rápido para o ecossistema .NET, projetado para superar outros serializadores C#. É 10x mais rápido que MsgPack-Cli e inclui suporte integrado à compressão LZ4, tornando-o ideal para aplicações críticas de desempenho, como jogos, computação distribuída, microsserviços e caches de dados.
## Principais Recursos
- **Alto Desempenho**: Utiliza geração de código IL Just-In-Time (JIT) em plataformas suportadas ou geradores de código-fonte seguros para AOT, visando velocidade ideal.
- **Tamanho Binário Compacto**: O formato binário do MessagePack é compacto e expressivo, reduzindo o tamanho do payload em comparação com formatos baseados em texto, como JSON.
- **Compressão LZ4**: Algoritmo de compressão integrado para payloads ainda menores, sem perda significativa de desempenho.
- **Multiplataforma**: Tem como alvo .NET Standard 2.0 com otimizações para .NET 8+ e .NET Framework, e suporta Unity e Xamarin.
- **Serialização Flexível**: Suporta chaves indexadas (int) e de string, com atributos como `[MessagePackObject]`, `[Key]` e `[IgnoreMember]` para controle explícito.
- **Suporte a Analisadores**: Inclui analisadores para detectar problemas comuns de serialização em tempo de compilação, melhorando a robustez do código.
- **Geração de Código AOT**: Para plataformas como Unity e Xamarin, geradores de código-fonte seguros para AOT garantem compatibilidade sem reflexão em tempo de execução.
- **Extensões**: Pacotes oficiais e de terceiros para ReactiveProperty, shims Unity, formatadores ASP.NET Core MVC e mais.
## Início Rápido
Defina uma classe ou struct com `[MessagePackObject]` e anote os membros com atributos `[Key]`:
```csharp
[MessagePackObject]
public class MyClass
{
[Key(0)]
public int Age { get; set; }
[Key(1)]
public string FirstName { get; set; }
[Key(2)]
public string LastName { get; set; }
[IgnoreMember]
public string FullName => FirstName + LastName;
}
```
Serialize e desserialize:
```csharp
var mc = new MyClass { Age = 99, FirstName = "hoge", LastName = "huga" };
byte[] bytes = MessagePackSerializer.Serialize(mc);
MyClass mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes);
// Converta para JSON para depuração
string json = MessagePackSerializer.ConvertToJson(bytes);
Console.WriteLine(json); // [99,"hoge","huga"]
```
## Serialização de Objetos
- **Chaves Indexadas**: Use `[Key(int)]` para serialização baseada em array, que é mais rápida e compacta.
- **Chaves de String**: Use `[Key(string)]` ou `[MessagePackObject(keyAsPropertyName: true)]` para chaves baseadas em nomes de propriedades, útil para depuração.
- **Resolver Contractless**: Para tipos dinâmicos ou anônimos, use `ContractlessStandardResolver` para evitar atributos explícitos.
- **Compatibilidade com DataContract**: Suporta atributos `[DataContract]` e `[DataMember]` para integração com modelos existentes.
- **Tipos Imutáveis**: Suporta serialização de membros somente leitura/imutáveis via `[SerializationConstructor]` ou registros C# 9.0.
## Recursos Avançados
- **Union**: Serialize tipos polimórficos usando atributos `[Union]` em interfaces ou classes abstratas.
- **Serialização Sem Tipo**: Use `TypelessContractlessStandardResolver` para comportamento semelhante ao BinaryFormatter.
- **Desserialização Dinâmica**: Desserialize para `ExpandoObject` ou use indexadores de dicionário para acesso sem tipo.
- **Formatadores Personalizados**: Implemente `IMessagePackFormatter<T>` para controle total sobre a lógica de serialização.
- **Resolvers**: Componha resolvers personalizados para controlar como os tipos são serializados, incluindo suporte a membros privados.
## Dicas de Desempenho
- Use chaves indexadas em vez de chaves de string para melhor desempenho.
- Crie resolvers compostos personalizados para otimizar tipos específicos.
- Use resolvers nativos como `StandardResolver` para cenários comuns.
- Esteja atento à cópia de buffers; use sobrecargas de `MessagePackSerializer.Serialize` que aceitam `IBufferWriter<byte>`.
- Escolha compressão LZ4 para cenários limitados por rede ou armazenamento.
## Instalação
Instale via NuGet:
```ps1
Install-Package MessagePack
```
Para Unity, siga o guia [Suporte Unity](doc/unity.md). Pacotes adicionais como `MessagePack.ReactiveProperty` e `MessagePack.AspNetCoreMvcFormatter` estão disponíveis para integrações específicas.
## Migração
Se estiver atualizando de uma versão principal anterior, consulte o [guia de migração](doc/migration.md) para mudanças significativas e atualizações.
## Comunidade e Suporte
- [Repositório GitHub](https://github.com/MessagePack-CSharp/MessagePack-CSharp)
- [Chat Gitter](https://gitter.im/MessagePack-CSharp/Lobby)
- [Pacote NuGet](https://www.nuget.org/packages/messagepack)
## Licença
Este projeto é licenciado sob a Licença MIT. Consulte o arquivo [LICENSE](LICENSE) para detalhes.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.