Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
MessagePack adalah format serialisasi biner yang ringkas, menghasilkan ukuran pesan yang lebih kecil dibandingkan dengan JSON dan XML. Pustaka sumber terbuka MessagePack for C# sangat berkinerja tinggi dan menawarkan kompresi LZ4 super cepat bawaan untuk ukuran data yang lebih kecil. Ini berfungsi paling baik ketika jenis data diannotasikan dengan atribut DataContractSerializer
pustaka atau sendiri. Ini dapat dikonfigurasi untuk mendukung lingkungan AOT, jenis dan anggota non-publik, dan jenis dan anggota baca-saja.
Beberapa perilaku dan fitur MessagePack untuk C# akan terkenal selama migrasi dari BinaryFormatter, terutama jika perubahan pada API jenis serial tidak dapat dibuat atau perlu diminimalkan.
Secara default, hanya jenis publik yang dapat diserialisasikan. Struktur dan kelas privat dan internal hanya dapat diserialisasikan ketika
StandardResolverAllowPrivate.Options
disediakan sebagai argumen keMessagePackSerializer.Serialize
metode danMessagePackSerializer.Deserialize
.MessagePack mengharuskan setiap jenis yang dapat diserialisasikan untuk diannotasikan dengan
[MessagePackObject]
atribut . Dimungkinkan untuk menghindarinya dengan menggunakan ContractlessStandardResolver, tetapi dapat menyebabkan masalah dengan penerapan versi di masa mendatang.Setiap bidang non-statis yang dapat diserialisasikan dan properti perlu dianotasi dengan
[Key]
atribut . Jika Anda membuat anotasi jenis dengan[MessagePackObject(keyAsPropertyName: true)]
atribut , maka anggota tidak memerlukan anotasi eksplisit. Dalam kasus seperti itu, untuk mengabaikan anggota publik tertentu, gunakan[IgnoreMember]
atribut .Untuk menserialisasikan anggota privat, gunakan StandardResolverAllowPrivate.
System.Runtime.Serialization
anotasi dapat digunakan alih-alih anotasi MessagePack:[DataContract]
alih-alih[MessagePackObject]
,[DataMember]
bukan[Key]
, dan[IgnoreDataMember]
bukan[IgnoreMember]
. Anotasi ini dapat berguna jika Anda ingin menghindari dependensi pada MessagePack di pustaka yang menentukan jenis yang dapat diserialisasikan.Ini mendukung jenis dan anggota baca-saja/tidak dapat diubah. Serializer akan mencoba menggunakan konstruktor publik dengan daftar argumen yang paling cocok. Konstruktor dapat ditentukan dengan cara eksplisit dengan menggunakan
[SerializationConstructor]
atribut.Serialization jenis arbitrer didukung melalui pemformat kustom yang sederhana untuk ditulis. Ini menghapus semua persyaratan untuk atribut dan pola konstruktor atau anggota tertentu.
Serializer mendukung jenis dan koleksi bawaan yang paling sering digunakan yang disediakan oleh pustaka kelas dasar .NET. Anda dapat menemukan daftar lengkapnya di dokumen resmi. Ini memiliki titik ekstensi yang memungkinkan penyesuaian.
Peringatan
MessagePack memiliki API untuk memungkinkan deserialisasi data tanpa batasan jenis. Per Catatan Keamanan MessagePack, API ini harus dihindari.
Peringatan
Beberapa API MessagePack memiliki perilaku yang dapat disesuaikan melalui statis yang dapat diubah, yang berarti kode Anda mungkin berhasil atau gagal berdasarkan kode lain apa dalam proses yang sama, AssemblyLoadContext atau AppDomain mungkin melakukannya. Anda dapat menjaga agar kode Anda tetap tangguh dengan juga merujuk paket MessagePackAnalyzer dan mengaktifkan penganalisis MsgPack001 dan MsgPack002, yang memanggil penggunaan API apa pun dengan perilaku yang dapat diubah.