MessagePack'e geçiş (ikili)

MessagePack, JSON ve XML ile karşılaştırıldığında daha küçük ileti boyutlarına neden olan kompakt bir ikili serileştirme biçimidir. C# kitaplığı için açık kaynak MessagePack yüksek performanslıdır ve daha da küçük bir veri boyutu için yerleşik süper hızlı LZ4 sıkıştırması sunar. Veri türlerine veya kitaplığın kendi öznitelikleriyle DataContractSerializer açıklama eklendiğinde en iyi şekilde çalışır. AOT ortamlarını, genel olmayan türleri ve üyeleri, salt okunur türleri ve üyeleri destekleyecek şekilde yapılandırılabilir.

C# için MessagePack'in bazı davranışları ve özellikleri, özellikle de serileştirilmiş türlerin API'lerinde değişiklik yapılamaması veya simge durumuna küçültülmesi gerekiyorsa, geçişler BinaryFormattersırasında dikkate değer olacaktır.

  • Varsayılan olarak, yalnızca genel türler serileştirilebilir. Özel ve iç yapılar ve sınıflar yalnızca ve StandardResolverAllowPrivate.Options yöntemleri için MessagePackSerializer.Serialize bağımsız değişken olarak sağlandığında MessagePackSerializer.Deserialize seri hale getirilebilir.

  • MessagePack, her serileştirilebilir türün özniteliğiyle ek açıklama eklemesini [MessagePackObject] gerektirir. ContractlessStandardResolver'ı kullanarak bunu önlemek mümkündür, ancak gelecekte sürüm oluşturmayla ilgili sorunlara neden olabilir.

  • Her seri hale getirilebilir statik olmayan alan ve bir özelliğe özniteliğiyle [Key] ek açıklama eklenmelidir. Özniteliğiyle [MessagePackObject(keyAsPropertyName: true)] türe açıklama eklerseniz, üyeler açık ek açıklama gerektirmez. Böyle bir durumda, belirli genel üyeleri yoksaymak için özniteliğini [IgnoreMember] kullanın.

  • Özel üyeleri seri hale getirmek için StandardResolverAllowPrivate kullanın.

  • System.Runtime.Serializationek açıklamalar MessagePack ek açıklamaları yerine kullanılabilir: [DataContract] yerine [MessagePackObject], [DataMember][Key] yerine ve [IgnoreDataMember] yerine [IgnoreMember]. Bu ek açıklamalar, serileştirilebilir türleri tanımlayan kitaplıkta MessagePack bağımlılığından kaçınmak istiyorsanız yararlı olabilir.

  • Salt okunur/sabit türleri ve üyeleri destekler. Seri hale getirici, ortak oluşturucuyu en iyi eşleşen bağımsız değişken listesiyle kullanmayı dener. Oluşturucu, özniteliği kullanılarak [SerializationConstructor] açık bir şekilde belirtilebilir.

  • Serialization rastgele türlerin yazması basit özel biçimlendiriciler aracılığıyla desteklenir. Bu, öznitelikler ve belirli oluşturucu veya üye desenleri için tüm gereksinimleri kaldırır.

  • Seri hale getirici, .NET temel sınıf kitaplıkları tarafından sağlanan en sık kullanılan yerleşik türleri ve koleksiyonları destekler. Tam listeyi resmi belgelerde bulabilirsiniz. Özelleştirmeye izin veren uzantı noktalarına sahiptir.

Uyarı

MessagePack, tür kısıtlamaları olmadan verilerin seri durumdan çıkarılmasına olanak sağlayan API'lere sahiptir. MessagePack Güvenlik Notları başına bu API'lerden kaçınılmalıdır.

Uyarı

Bazı MessagePack API'leri, değiştirilebilir statikler aracılığıyla özelleştirilebilir davranışlara sahiptir. Bu, assemblyLoadContext veya AppDomain'in aynı işlemdeki diğer kodlara göre kodunuzun başarılı olabileceği veya başarısız olabileceği anlamına gelir. Ayrıca MessagePackAnalyzer paketine başvurarak ve değiştirilebilir davranışa sahip API'lerin tüm kullanımlarını çağıran MsgPack001 ve MsgPack002 çözümleyicilerini etkinleştirerek kodunuzu dayanıklı tutabilirsiniz.