Migrar para o MessagePack (binário)
O MessagePack é um formato binário compacto, resultando em tamanhos de serialization mensagem menores em comparação com JSON e XML. A biblioteca de código aberto MessagePack para C# é de alto desempenho e oferece compactação LZ4 super-rápida integrada para um tamanho de dados ainda menor. Ele funciona melhor quando os tipos de dados são anotados com atributos da DataContractSerializer
própria biblioteca ou da própria biblioteca. Ele pode ser configurado para suportar ambientes AOT, tipos e membros não públicos e tipos e membros somente leitura.
Alguns comportamentos e recursos do MessagePack para C# serão notáveis durante as migrações do , especialmente se as alterações nas APIs dos BinaryFormattertipos serializados não puderem ser feitas ou precisarem ser minimizadas.
Por padrão, apenas os tipos públicos são serializáveis. Structs e classes particulares e internas podem ser serializadas somente quando
StandardResolverAllowPrivate.Options
são fornecidas como um argumento paraMessagePackSerializer.Serialize
eMessagePackSerializer.Deserialize
métodos.MessagePack requer que cada tipo serializável seja anotado com o
[MessagePackObject]
atributo. É possível evitar isso usando o ContractlessStandardResolver, mas isso pode causar problemas com o controle de versão no futuro.Cada campo não estático serializável e uma propriedade precisam ser anotados com o
[Key]
atributo. Se você anotar o tipo com o[MessagePackObject(keyAsPropertyName: true)]
atributo, os membros não precisarão de anotações explícitas. Nesse caso, para ignorar certos membros públicos, use o[IgnoreMember]
atributo.Para serializar membros privados, use StandardResolverAllowPrivate.
System.Runtime.Serialization
as anotações podem ser usadas em vez de anotações do MessagePack:[DataContract]
em vez de[MessagePackObject]
,[DataMember]
em vez de[Key]
, e[IgnoreDataMember]
em vez de[IgnoreMember]
. Essas anotações podem ser úteis se você quiser evitar uma dependência do MessagePack na biblioteca que define tipos serializáveis.Suporta tipos e membros somente leitura/imutáveis. O serializador tentará usar o construtor público com a melhor lista de argumentos correspondentes. O construtor pode ser especificado de forma explícita usando
[SerializationConstructor]
attribute.Serialization de tipos arbitrários são suportados através de formatters personalizados que são simples de criar. Isso remove todos os requisitos para atributos e padrões específicos de construtor ou membro.
O serializador suporta tipos internos usados com mais freqüência e coleções fornecidas pelas bibliotecas de classes base do .NET. Você pode encontrar a lista completa em documentos oficiais. Possui pontos de extensão que permitem a personalização.
Aviso
O MessagePack tem APIs para permitir a desserialização de dados sem restrições de tipo. De acordo com as Notas de Segurança do MessagePack, essas APIs devem ser evitadas.
Aviso
Algumas APIs do MessagePack têm um comportamento personalizável por meio de estática mutável, o que significa que seu código pode ter êxito ou falhar com base no que outro código no mesmo processo, AssemblyLoadContext ou AppDomain, pode fazer. Você pode manter seu código resiliente também fazendo referência ao pacote MessagePackAnalyzer e habilitando os analisadores MsgPack001 e MsgPack002, que chamam qualquer uso de APIs com comportamento mutável.