Ceras ist ein binärer Serialisierer. Es wandelt jedes Objekt in ein byte[]
und zurück um. In puncto Funktionen, Geschwindigkeit und Komfort geht es weit darüber hinaus. Unterstützt Referenzschleifen, große/komplizierte Vererbungsketten, Aufteilen von Objekten in Teile, ...
Klasse Person { öffentlicher String Name; öffentliches Int Alter; }var p = neue Person { Name = "riki", Alter = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> Viele weitere Beispiele im Code-Tutorial
>> Detaillierte Anleitungen für bestimmte Szenarien auf meinem Blog
>> Lesen Sie „Fallstricke bei Optimierung und Nutzung“
>> Changelog v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> Neue Funktionen in v4.0 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
Sehr schnelle, kleine Binärausgabe (siehe Leistung )
Unterstützt so ziemlich jeden Typ:
Handgeschriebene Formatierer für alle gängigen .NET-Typen
Enthält Formatierer für alle gängigen Unity-Typen
Erzeugt zur Laufzeit neue Formatierer für jeden neuen/Benutzertyp
Sehr einfach zu erweitern und anzupassen
Volle Unterstützung für Referenzpersistenz (einschließlich Zirkelverweise!)
Volle Unterstützung für Polymorphismus/Vererbung/Schnittstellen
Kann Objekte als „ExtenalObjects“ in Teile serialisieren (nützlich in vielen, vielen Szenarien)
Automatische Versionstoleranz, Sie müssen Ihren Klassen keine Attribute hinzufügen!
vollständige Funktionsliste (und geplante Funktionen)
Generell rangiert Ceras zusammen mit NetSerializer und MessagePack-CSharp am oberen Ende des Leistungsspektrums. Um einen Eindruck davon zu bekommen, wie Ceras abschneidet, finden Sie hier die vorläufigen Benchmark-Ergebnisse. Die resultierende Binärgröße entspricht in etwa der von MessagePack-CSharp.
Die angezeigten Ergebnisse stammen aus diesem Code und ich empfehle Ihnen, es nicht nur selbst auszuprobieren, sondern auch Feedback zu Szenarien zu geben, mit denen Sie gute und schlechte Ergebnisse erzielt haben.
Vergessen Sie nicht, die Einstellungen in SerializerConfig
an Ihre spezifische Situation anzupassen. Die Verwendung von Ceras zum Lesen/Schreiben von Netzwerkpaketen erfordert möglicherweise andere Einstellungen als beispielsweise das Speichern eines Einstellungsobjekts in einer Datei oder das Beibehalten von Gegenständen/Zaubersprüchen/Monstern in einem Spiel oder ...
Das Projekt ist noch in vollem Gange, was bedeutet, dass im Laufe der Zeit weitere Optimierungen umgesetzt werden (Ihr Feedback ist hier wichtig!).
Das Hauptziel besteht darin, einen universellen Serialisierer zu entwickeln, der in jeder Situation verwendet werden kann. Persönlich waren meine Hauptabsichten einfache Objektpersistenz und Netzwerkkommunikation. Ich habe im Laufe der Zeit viele Funktionen hinzugefügt und wann immer jemand ein gutes Szenario einfällt, das ebenfalls unterstützt werden sollte, werde ich es umsetzen.
Beispiele:
Einstellungen: Schnelles und unkompliziertes Speichern von Objekten auf der Festplatte: Einstellungen, Spielstände, was auch immer. Mit so ziemlich keiner Konfiguration. Siehe Schritte 1 und 2 im Nutzungshandbuch
Aufteilung: Ihre Person
hat also Verweise auf andere Person
Objekte, aber jedes sollte einzeln serialisiert werden!? (ohne dass die Referenzen schnell Ihr gesamtes Programm in Mitleidenschaft ziehen). Vielleicht möchten Sie in der Lage sein, jede Person
in einer eigenen Datei abzulegen oder sie bei Bedarf einzeln über das Netzwerk zu senden? Kein Problem! Mit IExternalRootObject
ist das kein Problem! Siehe Anleitung zu externen Objekten (Beispiel für die Spieldatenbank).
Netzwerk: Aufgrund seiner einfachen API und seines umfangreichen Funktionsumfangs eignet sich Ceras hervorragend für die Implementierung eines vollständigen „Netzwerkprotokolls“ für Sie. Ich habe eine kurze Anleitung geschrieben, die zeigt, wie eine grundlegende TCP-Implementierung aussehen könnte: Just Send(myObject);
it, dann var obj = await Receive();
auf der anderen Seite, das ist es! Einfacher geht es buchstäblich nicht. Im Moment besteht der Leitfaden nur aus zwei Teilen, aber wenn ich welche habe (und wenn es Anfragen dafür gibt), würde ich die Serie gerne fortsetzen und dieses Beispiel schließlich zu einem vollwertigen, robusten und kampferprobten Netzwerk ausbauen System.
Mehr: Das oben Genannte sind nur Beispiele. Ceras ist so konzipiert, dass es in nahezu jeder Situation eingesetzt werden kann ...
Wenn Sie aus irgendeinem Grund eine für Menschen lesbare Ausgabe benötigen. Zum Beispiel eine Datei, die Sie in einem Texteditor bearbeiten möchten. Für diese Verwendungen sind JSON oder XML wahrscheinlich besser geeignet.
Sie planen, dies auf einer Plattform zu verwenden, die keine Codegenerierung unterstützt. Serialisierer für Benutzertypen werden zur Laufzeit durch Codegenerierung erstellt. Und wenn das nicht erlaubt ist (zum Beispiel auf iOS), kann Ceras keine beliebigen Objektformatierer generieren. Integrierte Typen funktionieren jedoch weiterhin. Es gibt jedoch Möglichkeiten, dies zu beheben ... (Vorgenerierung der Formatierer) Ceras verfügt jetzt über einen dedizierten AotMode
in der Konfiguration und einen Codegenerator (Kurzanleitung dazu hier) für IL2CPP/Unity/AoT.
Öffnen Sie ein Problem
Treten Sie meinem Discord bei (wahrscheinlich das Beste für direkte Einzelhilfe)
Stellen Sie sicher, dass Sie die FAQ und Optimierung und Fallstricke gelesen haben