Migrera till MessagePack (binärt)
MessagePack är ett kompakt binärt serialization format, vilket resulterar i mindre meddelandestorlekar jämfört med JSON och XML. Biblioteket öppen källkod MessagePack for C# är mycket högpresterande och erbjuder inbyggd supersnabb LZ4-komprimering för en ännu mindre datastorlek. Det fungerar bäst när datatyper kommenteras med antingen DataContractSerializer
eller bibliotekets egna attribut. Den kan konfigureras för att stödja AOT-miljöer, icke-offentliga typer och medlemmar samt skrivskyddade typer och medlemmar.
Vissa beteenden och funktioner i MessagePack för C# kommer att vara anmärkningsvärda under migreringar från BinaryFormatter, särskilt om ändringar i serialiserade typers API:er inte kan göras eller behöver minimeras.
Som standard är endast offentliga typer serialiserbara. Privata och interna structs och klasser kan endast serialiseras när
StandardResolverAllowPrivate.Options
det anges som ett argument tillMessagePackSerializer.Serialize
ochMessagePackSerializer.Deserialize
metoder.MessagePack kräver att varje serialiserbar typ kommenteras med attributet
[MessagePackObject]
. Det är möjligt att undvika detta genom att använda ContractlessStandardResolver, men det kan orsaka problem med versionshantering i framtiden.Varje serialiserbart icke-statiskt fält och en egenskap måste kommenteras med
[Key]
attributet. Om du kommenterar typen med[MessagePackObject(keyAsPropertyName: true)]
attributet behöver medlemmar inte explicita anteckningar. Om du vill ignorera vissa offentliga medlemmar använder du attributet[IgnoreMember]
.Om du vill serialisera privata medlemmar använder du StandardResolverAllowPrivate.
System.Runtime.Serialization
anteckningar kan användas i stället för MessagePack-anteckningar:[DataContract]
i stället för[MessagePackObject]
,[DataMember]
i stället för[Key]
, och[IgnoreDataMember]
i stället för[IgnoreMember]
. Dessa anteckningar kan vara användbara om du vill undvika ett beroende av MessagePack i biblioteket som definierar serialiserbara typer.Den stöder skrivskyddade/oföränderliga typer och medlemmar. Serialiseraren försöker använda den offentliga konstruktorn med den bäst matchade argumentlistan. Konstruktorn kan anges på ett explicit sätt med hjälp
[SerializationConstructor]
av attributet .Serialization av godtyckliga typer stöds via anpassade formatters som är enkla att skapa. Detta tar bort alla krav för attribut och specifika konstruktor- eller medlemsmönster.
Serialiseraren stöder de vanligaste inbyggda typerna och samlingarna som tillhandahålls av .NET-basklassbiblioteken. Du hittar hela listan i officiella dokument. Den har tilläggspunkter som tillåter anpassning.
Varning
MessagePack har API:er för att tillåta deserialisering av data utan typbegränsningar. Dessa API:er bör undvikas per MessagePack-säkerhetsanteckningar.
Varning
Vissa MessagePack-API:er har ett beteende som kan anpassas via föränderliga statiska objekt, vilket innebär att koden kan lyckas eller misslyckas baserat på vad annan kod i samma process, AssemblyLoadContext eller AppDomain kan göra. Du kan hålla koden elastisk genom att även referera till MessagePackAnalyzer-paketet och aktivera analysverktygen MsgPack001 och MsgPack002, som anropar all användning av API:er med ändringsbart beteende.