Ceras — двоичный сериализатор. Он преобразует любой объект в byte[]
и обратно. Он превосходит все возможности с точки зрения функциональности, скорости и комфорта. Поддерживает ссылочные циклы, большие/сложные цепочки наследования, разделение объектов на части,...
класс Person {публичное имя строки; public int Возраст; }var p = новый человек {Name = "riki", Age = 5};var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> Еще много примеров в руководстве по коду
>> Подробные руководства для конкретных сценариев в моем блоге.
>> Прочтите «Ошибки оптимизации и использования»
>> Журнал изменений v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> Новые возможности версии 4.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();
с другой стороны, вот и все! Это буквально не может быть проще, чем это. На данный момент руководство состоит только из двух частей, но когда они у меня появятся (и если на них будут запросы), я хотел бы продолжить серию, в конечном итоге превратив этот образец в полноценную, надежную и проверенную в боях сеть. система.
Подробнее: Выше приведены лишь примеры. Ceras создан таким образом, что его можно использовать практически в любой ситуации...
Если по какой-то причине вам нужен удобочитаемый вывод. Например, какой-нибудь файл, который вы хотите редактировать в текстовом редакторе. Для этих целей, вероятно, лучше подходят JSON или XML.
Вы планируете использовать это на платформе, которая не поддерживает генерацию кода. Сериализаторы для типов пользователей создаются во время выполнения посредством генерации кода. А если это не разрешено (например, в iOS), Ceras не сможет генерировать произвольные средства форматирования объектов. Однако встроенные типы по-прежнему будут работать. Однако есть способы это исправить... (предварительная генерация средств форматирования) Ceras теперь имеет выделенный AotMode
в конфигурации и генератор кода (краткое руководство по нему здесь) для IL2CPP/Unity/AoT.
Открыть проблему
Присоединяйтесь к моему Discord (вероятно, лучшему для прямой индивидуальной помощи)
Обязательно прочтите раздел «Часто задаваемые вопросы» и «Оптимизация и подводные камни».