Ceras 是一個二進位序列化器。它將任何物件轉換為byte[]
並返回。它在功能、速度和舒適度方面都超越了我們。支援引用循環、大型/複雜的繼承鏈、將物件拆分為多個部分...
類別 Person { 公共字串名稱;公共 int 年齡; }var p = new Person { Name = "riki", Age = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> 程式碼教學中有更多範例
>> 具體場景的詳細指南請見我的博客
>> 閱讀“優化和使用陷阱”
>> 變更日誌 v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> v4.0 中的新功能 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
非常快、小的二進位輸出(請參閱效能)
幾乎支援任何類型:
適用於所有常見 .NET 類型的手寫格式化程序
附帶適用於所有常見 Unity 類型的格式化程序
在運行時為任何新/用戶類型產生新的格式化程序
非常容易擴展和定制
完全支援引用持久性(包括循環引用!)
全面支援多型/繼承/介面
可以將物件序列化為“ExtenalObjects”部分(在許多場景中很有用)
自動版本容錯,無需在您的類別上放置任何屬性!
完整的功能清單(和計劃的功能)
Ceras 通常與 NetSerializer 和 MessagePack-CSharp 一起處於效能範圍的頂端。若要了解 Ceras 的表現,請查看初步基準測試結果。產生的二進位大小與 MessagePack-CSharp 大致相同。
顯示的結果是從此程式碼中獲得的,我鼓勵您不僅自己嘗試,而且還提供有關您獲得好的和壞的結果的場景的回饋。
不要忘記根據您的具體情況調整SerializerConfig
中的設定。使用 Ceras 讀取/寫入網路封包可能需要不同的設置,比方說,將設定物件保存到文件,或在遊戲中保留項目/咒語/怪物,或者...
該專案仍在大量進行中,這意味著隨著時間的推移,將會實施更多優化(您的回饋在這裡很重要!)。
主要目標是製作一個可在各種情況下使用的通用序列化器。就我個人而言,我的主要意圖是簡單的物件持久性和網路通訊。隨著時間的推移,我添加了許多功能,只要有人能想到一個應該得到支援的好方案,我就會實現它。
範例:
設定:將物件快速保存到磁碟,沒有太多麻煩:設置,保存遊戲,無論是什麼。幾乎零配置。請參閱使用指南中的步驟 1 和 2
拆分:所以您的Person
引用了其他Person
對象,但每個對像都應該單獨序列化! (沒有參考文獻很快就會拖入整個程序)。也許您希望能夠將每個Person
放入自己的文件中,或者根據需要透過網路將它們一一發送?沒問題!使用IExternalRootObject
這不是問題!請參閱外部物件指南(遊戲資料庫範例))。
網路:由於其簡單的 API 和大量的功能,Ceras 非常適合為您實施完整的「網路協定」。我寫了一個簡短的指南,展示了基本 TCP 實作的樣子:Just Send(myObject);
它,然後var obj = await Receive();
另一邊,就是這樣!確實沒有比這更簡單的了。目前指南只有 2 部分,但是當我有了一些部分(並且如果有要求)時,我想繼續該系列,最終將該示例構建為成熟、強大且經過實戰考驗的網絡系統。
更多:以上只是示例,Ceras 的設計使其可以在幾乎所有情況下使用...
如果您出於某種原因需要人類可讀的輸出。例如,您希望能夠在文字編輯器中編輯某些文件。對於這些用途,JSON 或 XML 可能更適合。
您計劃在不支援程式碼生成的平台上使用它。使用者類型的序列化器是在運行時透過程式碼產生創建的。如果不允許(例如在 iOS 上),Ceras 將無法產生任意物件格式化程式。不過,內建類型仍然可以工作。有一些方法可以解決這個問題...(預先產生格式化程式) Ceras 現在在設定中有一個專用的AotMode
以及一個用於 IL2CPP/Unity/AoT 的程式碼產生器(此處的快速指南)。
打開一個問題
加入我的 Discord(可能是直接一對一幫助的最佳選擇)
確保您已閱讀常見問題和優化與陷阱