Ceras est un sérialiseur binaire. Il convertit n'importe quel objet en byte[]
et inversement. Il va au-delà des attentes en termes de fonctionnalités, de vitesse et de confort. Prend en charge les boucles de référence, les chaînes d'héritage volumineuses/compliquées, la division des objets en parties, ...
class Person { chaîne publique Nom ; public int Âge ; }var p = new Person { Nom = "riki", Age = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> Beaucoup d'autres exemples dans le tutoriel de code
>> Guides détaillés pour des scénarios spécifiques sur mon blog
>> Lire « Pièges d'optimisation et d'utilisation »
>> Journal des modifications v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> Nouvelles fonctionnalités de la v4.0 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
Sortie binaire très rapide et petite (voir Performances )
Prend en charge à peu près n’importe quel type :
Formateurs manuscrits pour tous les types .NET courants
Livré avec des formateurs pour tous les types Unity courants
Génère de nouveaux formateurs au moment de l'exécution pour tout type de nouveau/utilisateur
Très facile à étendre et à personnaliser
Prise en charge complète de la persistance des références (y compris les références circulaires !)
Prise en charge complète du polymorphisme/héritage/interfaces
Peut sérialiser des objets en parties en tant que "ExtenalObjects" (utile dans de nombreux scénarios)
Tolérance de version automatique, pas besoin de placer d'attributs sur vos classes !
liste complète des fonctionnalités (et fonctionnalités prévues)
Ceras se classe généralement dans le haut du spectre des performances, avec NetSerializer et MessagePack-CSharp. Pour avoir une idée des performances de Ceras, voici les résultats préliminaires du benchmark. La taille binaire résultante est à peu près la même que celle de MessagePack-CSharp.
Les résultats affichés sont obtenus à partir de ce code et je vous encourage non seulement à l'essayer vous-même, mais également à fournir des commentaires sur les scénarios avec lesquels vous avez obtenu de bons et de mauvais résultats.
N'oubliez pas d'ajuster les paramètres dans SerializerConfig
pour votre situation spécifique. L'utilisation de Ceras pour lire/écrire des paquets réseau peut nécessiter des paramètres différents de ceux, disons, de l'enregistrement d'un objet de paramètres dans un fichier, ou de la persistance d'objets/sorts/monstres dans un jeu, ou...
Le projet est encore en cours de réalisation, ce qui signifie qu'au fil du temps, davantage d'optimisations seront mises en œuvre (vos commentaires sont importants ici !).
L’objectif principal est de créer un sérialiseur universel pouvant être utilisé dans toutes les situations. Personnellement, mes principales intentions étaient la persistance facile des objets et la communication réseau. J'ai ajouté de nombreuses fonctionnalités au fil du temps et chaque fois que quelqu'un pense à un bon scénario qui devrait également être pris en charge, je le réaliserai.
Exemples :
Paramètres : Sauvegarder rapidement des objets sur le disque sans trop de problèmes : paramètres, sauvegardes, quoi qu'il en soit. Avec quasiment aucune configuration. Voir les étapes 1 et 2 dans le guide d'utilisation
Fractionnement : votre Person
a donc des références à d'autres objets Person
, mais chacun doit être sérialisé individuellement !? (sans que les références ne traînent rapidement dans l'essentiel de votre programme). Peut-être souhaitez-vous pouvoir placer chaque Person
dans son propre fichier, ou les envoyer sur le réseau une par une selon vos besoins ? Aucun problème! En utilisant IExternalRootObject
ce n'est pas un problème ! Voir Guide des objets externes (exemple de base de données de jeu)).
Réseau : Grâce à son API simple et à son vaste ensemble de fonctionnalités, Ceras est particulièrement adapté pour mettre en œuvre un « protocole réseau » complet pour vous. J'ai écrit un petit guide qui montre à quoi pourrait ressembler une implémentation TCP de base : Just Send(myObject);
dessus, alors var obj = await Receive();
de l'autre côté, c'est tout ! Cela ne peut littéralement pas être plus simple que cela. Pour le moment, le guide ne comporte que 2 parties, mais quand j'en aurai (et s'il y a des demandes), j'aimerais continuer la série, en construisant éventuellement cet exemple dans un réseau à part entière, robuste et testé au combat. système.
En savoir plus : Les éléments ci-dessus ne sont que des exemples, Ceras est conçu pour pouvoir être utilisé dans presque toutes les situations...
Si vous avez besoin d'une sortie lisible par l'homme pour une raison quelconque. Par exemple un fichier que vous souhaitez pouvoir éditer dans un éditeur de texte. Pour ces utilisations, JSON ou XML sont probablement mieux adaptés.
Vous envisagez de l'utiliser sur une plate-forme qui ne prend pas en charge la génération de code. Les sérialiseurs pour les types d'utilisateurs sont créés au moment de l'exécution via la génération de code. Et si cela n'est pas autorisé (par exemple sur iOS), Ceras ne pourra pas générer de formateurs d'objets arbitraires. Les types intégrés fonctionneront toujours. Il existe cependant des moyens de résoudre ce problème... (pré-génération des formateurs) Ceras a désormais un AotMode
dédié dans la configuration et un générateur de code (guide rapide ici) pour IL2CPP/Unity/AoT.
Ouvrir un problème
Rejoignez mon Discord (probablement le meilleur pour une aide individuelle directe)
Assurez-vous d'avoir lu la FAQ et l'optimisation et les pièges.