À propos du projet

# MessagePack pour C# (.NET Framework, .NET 8, Unity, Xamarin) MessagePack pour C# est un sérialiseur MessagePack extrêmement rapide pour l'écosystème .NET, conçu pour surpasser les autres sérialiseurs C#. Il est 10 fois plus rapide que MsgPack-Cli et inclut un support de compression LZ4 intégré, ce qui le rend idéal pour les applications critiques en performances comme les jeux, le calcul distribué, les microservices et les caches de données. ## Fonctionnalités clés - **Haute performance** : Utilise la génération de code IL Just-In-Time (JIT) sur les plateformes prises en charge ou des générateurs de source sûrs pour AOT afin d'obtenir une vitesse optimale. - **Taille binaire compacte** : Le format binaire de MessagePack est compact et expressif, réduisant la taille de la charge utile par rapport aux formats textuels comme JSON. - **Compression LZ4** : Algorithme de compression intégré pour des charges utiles encore plus petites sans perte de performance significative. - **Multiplateforme** : Cible .NET Standard 2.0 avec des optimisations pour .NET 8+ et .NET Framework, et prend en charge Unity et Xamarin. - **Sérialisation flexible** : Prend en charge les clés indexées (int) et les clés de chaîne, avec des attributs comme `[MessagePackObject]`, `[Key]` et `[IgnoreMember]` pour un contrôle explicite. - **Support d'analyseur** : Inclut des analyseurs pour détecter les problèmes de sérialisation courants au moment de la compilation, améliorant la robustesse du code. - **Génération de code AOT** : Pour les plateformes comme Unity et Xamarin, des générateurs de source sûrs pour AOT garantissent la compatibilité sans réflexion à l'exécution. - **Extensions** : Packages officiels et tiers pour ReactiveProperty, les adaptateurs Unity, les formateurs ASP.NET Core MVC, et plus encore. ## Démarrage rapide Définissez une classe ou une structure avec `[MessagePackObject]` et annotez les membres avec les attributs `[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; } ``` Sérialisez et désérialisez : ```csharp var mc = new MyClass { Age = 99, FirstName = "hoge", LastName = "huga" }; byte[] bytes = MessagePackSerializer.Serialize(mc); MyClass mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes); // Convertir en JSON pour le débogage string json = MessagePackSerializer.ConvertToJson(bytes); Console.WriteLine(json); // [99,"hoge","huga"] ``` ## Sérialisation d'objets - **Clés indexées** : Utilisez `[Key(int)]` pour une sérialisation basée sur un tableau, plus rapide et plus compacte. - **Clés de chaîne** : Utilisez `[Key(string)]` ou `[MessagePackObject(keyAsPropertyName: true)]` pour des clés basées sur les noms de propriétés, utiles pour le débogage. - **Résolveur sans contrat** : Pour les types dynamiques ou anonymes, utilisez `ContractlessStandardResolver` pour éviter les attributs explicites. - **Compatibilité DataContract** : Prend en charge les attributs `[DataContract]` et `[DataMember]` pour l'intégration avec des modèles existants. - **Types immuables** : Prend en charge la sérialisation de membres en lecture seule/immuables via `[SerializationConstructor]` ou les records C# 9.0. ## Fonctionnalités avancées - **Union** : Sérialisez des types polymorphes en utilisant les attributs `[Union]` sur les interfaces ou les classes abstraites. - **Sérialisation sans type** : Utilisez `TypelessContractlessStandardResolver` pour un comportement similaire au formateur binaire. - **Désérialisation dynamique** : Désérialisez vers `ExpandoObject` ou utilisez des indexeurs de dictionnaire pour un accès non typé. - **Formateurs personnalisés** : Implémentez `IMessagePackFormatter<T>` pour un contrôle total de la logique de sérialisation. - **Résolveurs** : Composez des résolveurs personnalisés pour contrôler la façon dont les types sont sérialisés, y compris le support des membres privés. ## Conseils de performance - Utilisez des clés indexées au lieu de clés de chaîne pour de meilleures performances. - Créez des résolveurs composites personnalisés pour optimiser des types spécifiques. - Utilisez des résolveurs natifs comme `StandardResolver` pour les scénarios courants. - Faites attention à la copie de tampon ; utilisez les surcharges de `MessagePackSerializer.Serialize` qui acceptent `IBufferWriter<byte>`. - Choisissez la compression LZ4 pour les scénarios liés au réseau ou au stockage. ## Installation Installez via NuGet : ```ps1 Install-Package MessagePack ``` Pour Unity, suivez le guide [Support Unity](doc/unity.md). Des packages supplémentaires comme `MessagePack.ReactiveProperty` et `MessagePack.AspNetCoreMvcFormatter` sont disponibles pour des intégrations spécifiques. ## Migration Si vous effectuez une mise à niveau depuis une version majeure précédente, consultez le [guide de migration](doc/migration.md) pour les changements cassants et les mises à jour. ## Communauté et support - [Dépôt GitHub](https://github.com/MessagePack-CSharp/MessagePack-CSharp) - [Chat Gitter](https://gitter.im/MessagePack-CSharp/Lobby) - [Package NuGet](https://www.nuget.org/packages/messagepack) ## Licence Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails.