Ceras es un serializador binario. Convierte cualquier objeto en un byte[]
y viceversa. Va más allá en términos de características, velocidad y comodidad. Admite bucles de referencia, cadenas de herencia grandes/complicadas, división de objetos en partes,...
clase Persona {nombre de cadena pública; edad int pública; }var p = nueva Persona { Nombre = "riki", Edad = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> Muchos más ejemplos en el tutorial de código.
>> Guías detalladas para escenarios específicos en mi blog
>> Lea 'Errores de optimización y uso'
>> Registro de cambios v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> Nuevas funciones en v4.0 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
Salida binaria pequeña y muy rápida (consulte Rendimiento )
Soporta prácticamente cualquier tipo:
Formateadores escritos a mano para todos los tipos .NET comunes
Viene con formateadores para todos los tipos comunes de Unity
Genera nuevos formateadores en tiempo de ejecución para cualquier tipo nuevo/usuario
Muy fácil de ampliar y personalizar.
Soporte completo para la persistencia de referencias (¡incluidas las referencias circulares!)
Soporte completo para polimorfismo/herencia/interfaces.
Puede serializar objetos en partes como "ExtenalObjects" (útil en muchos escenarios)
Tolerancia automática de versiones, ¡no es necesario colocar ningún atributo en sus clases!
lista completa de funciones (y funciones planificadas)
Ceras generalmente se ubica en el extremo superior del espectro de rendimiento, junto con NetSerializer y MessagePack-CSharp. Para tener una idea de cómo se desempeña Ceras, aquí están los resultados preliminares de las pruebas comparativas. El tamaño binario resultante es aproximadamente el mismo que el de MessagePack-CSharp.
Los resultados mostrados se obtienen de este código y le animo a que no sólo lo pruebe usted mismo, sino que también proporcione comentarios sobre los escenarios en los que obtuvo buenos y malos resultados.
No olvide ajustar la configuración en SerializerConfig
para su situación específica. Usar Ceras para leer/escribir paquetes de red puede requerir configuraciones diferentes que, digamos, guardar un objeto de configuración en un archivo, o persistir elementos/hechizos/monstruos en un juego, o...
El proyecto aún está en gran medida en progreso, lo que significa que con el tiempo se implementarán más optimizaciones (¡sus comentarios son importantes aquí!).
El objetivo principal es crear un serializador universal que pueda usarse en cualquier situación. Personalmente, mis principales intenciones eran la fácil persistencia de objetos y la comunicación en red. He agregado muchas funciones a lo largo del tiempo y siempre que alguien pueda pensar en un buen escenario que también deba ser compatible, lo haré realidad.
Ejemplos:
Configuración: Guardar objetos en el disco rápidamente y sin muchos problemas: configuración, partidas guardadas, lo que sea. Con una configuración prácticamente nula. Consulte los pasos 1 y 2 en la Guía de uso.
División: Entonces, ¿su Person
tiene referencias a otros objetos Person
, pero cada uno debe serializarse individualmente? (sin que las referencias arrastren rápidamente esencialmente todo el programa). ¿Quizás desee poder colocar a cada Person
en su propio archivo o enviarlas a través de la red una por una según sea necesario? ¡Ningún problema! ¡Usar IExternalRootObject
no es un problema! Consulte la Guía de objetos externos (ejemplo de Game DB)).
Red: debido a su API simple y su amplio conjunto de funciones, Ceras es especialmente adecuado para implementar un "protocolo de red" completo para usted. Escribí una breve guía que muestra cómo podría verse una implementación TCP básica: Just Send(myObject);
entonces var obj = await Receive();
por otro lado, ¡ya está! Literalmente, no puede ser más fácil que eso. Por el momento, la guía solo tiene 2 partes, pero cuando tenga algunas (y si hay solicitudes) me gustaría continuar con la serie y, eventualmente, convertir esa muestra en una red completa, sólida y probada en batalla. sistema.
Más: Lo anterior son sólo ejemplos, Ceras está hecho para que pueda usarse en prácticamente cualquier situación...
Si necesita resultados legibles por humanos por algún motivo. Por ejemplo, algún archivo que desee poder editar en un editor de texto. Para esos usos, JSON o XML probablemente sean más adecuados.
Planea utilizar esto en una plataforma que no admite la generación de código. Los serializadores para tipos de usuarios se crean en tiempo de ejecución mediante la generación de código. Y si eso no está permitido (por ejemplo en iOS), Ceras no podrá generar formateadores de objetos arbitrarios. Sin embargo, los tipos integrados seguirán funcionando. Sin embargo, hay formas de solucionar este problema... (pregeneración de los formateadores) Ceras ahora tiene un AotMode
dedicado en la configuración y un generador de código (guía rápida para ello aquí) para IL2CPP/Unity/AoT.
abrir un problema
Únase a mi Discord (probablemente el mejor para obtener ayuda directa e individualizada)
Asegúrate de haber leído las preguntas frecuentes y Optimización y errores