Ceras é um serializador binário. Ele converte qualquer objeto em um byte[]
e vice-versa. Ele vai além em termos de recursos, velocidade e conforto. Suporta loops de referência, cadeias de herança grandes/complicadas, divisão de objetos em partes, ...
classe Pessoa {string pública Nome; público int Idade; }var p = new Pessoa { Nome = "riki", Idade = 5 };var ceras = new CerasSerializer();var bytes = ceras.Serialize(p);
>> Muitos mais exemplos no tutorial de código
>> Guias detalhados para cenários específicos no meu blog
>> Leia 'Armadilhas de otimização e uso'
>> Registro de alterações v3.0 (rikidev.com/new-features-in-ceras-3-0-2)
>> Novos recursos na v4.0 (https://github.com/rikimaru0345/Ceras/releases/tag/4.0)
Saída binária muito rápida e pequena (consulte Desempenho )
Suporta praticamente qualquer tipo:
Formatadores escritos à mão para todos os tipos comuns de .NET
Vem com formatadores para todos os tipos comuns de Unity
Gera novos formatadores em tempo de execução para qualquer tipo novo/de usuário
Muito fácil de estender e personalizar
Suporte total para persistência de referência (incluindo referências circulares!)
Suporte completo para polimorfismo/herança/interfaces
Pode serializar objetos em partes como "ExtenalObjects" (útil em muitos cenários)
Tolerância automática de versão, sem necessidade de colocar nenhum atributo em suas classes!
lista completa de recursos (e recursos planejados)
Ceras geralmente está no topo do espectro de desempenho, junto com NetSerializer e MessagePack-CSharp. Para se ter uma ideia do desempenho do Ceras, aqui estão os resultados preliminares do benchmark. O tamanho binário resultante é quase igual ao MessagePack-CSharp.
Os resultados mostrados são obtidos a partir deste código e eu encorajo você não apenas a tentar você mesmo, mas também a fornecer feedback sobre os cenários nos quais você obteve resultados bons e ruins.
Não se esqueça de ajustar as configurações em SerializerConfig
para sua situação específica. Usar Ceras para ler/escrever pacotes de rede pode exigir configurações diferentes do que, digamos, salvar um objeto de configurações em um arquivo ou persistir itens/feitiços/monstros em um jogo, ou ...
O projeto ainda está em andamento, o que significa que com o tempo mais otimizações serão implementadas (seu feedback é importante aqui!).
O objetivo principal é criar um serializador universal que possa ser usado em todas as situações. Pessoalmente, minhas principais intenções eram fácil persistência de objetos e comunicação em rede. Eu adicionei muitos recursos ao longo do tempo e sempre que alguém puder pensar em um bom cenário que também deva ser suportado, eu farei isso acontecer.
Exemplos:
Configurações: Salvar objetos no disco rapidamente e sem muitos problemas: configurações, savegames, seja lá o que for. Com praticamente zero configuração. Veja as etapas 1 e 2 no Guia de uso
Divisão: Então seu Person
tem referências a outros objetos Person
, mas cada um deve ser serializado individualmente!? (sem que as referências se arrastem rapidamente essencialmente em todo o seu programa). Talvez você queira colocar cada Person
em seu próprio arquivo ou enviá-las pela rede, uma por uma, conforme necessário? Sem problemas! Usar IExternalRootObject
não é um problema! Consulte Guia de objetos externos (exemplo de banco de dados de jogo)).
Rede: Devido à sua API simples e vasto conjunto de recursos, o Ceras é exclusivamente adequado para implementar um 'protocolo de rede' completo para você. Escrevi um pequeno guia que mostra como seria uma implementação básica de TCP: Just Send(myObject);
isso, então var obj = await Receive();
do outro lado, é isso! Literalmente não pode ser mais fácil do que isso. No momento, o guia tem apenas 2 partes, mas quando eu tiver algumas (e se houver solicitações), gostaria de continuar a série, eventualmente construindo esse exemplo em uma rede completa, robusta e testada em batalha. sistema.
Mais: Os itens acima são apenas exemplos, o Ceras é feito para que possa ser usado em praticamente todas as situações...
Se você precisar de uma saída legível por humanos por algum motivo. Por exemplo, algum arquivo que você deseja editar em um editor de texto. Para esses usos, JSON ou XML são provavelmente mais adequados.
Você planeja usar isso em uma plataforma que não oferece suporte à geração de código. Serializadores para tipos de usuário são criados em tempo de execução por meio de geração de código. E se isso não for permitido (por exemplo, no iOS), o Ceras não será capaz de gerar formatadores de objetos arbitrários. Os tipos integrados ainda funcionarão. Existem maneiras de corrigir isso... (pré-gerando os formatadores) Ceras agora tem um AotMode
dedicado na configuração e um gerador de código (guia rápido aqui) para IL2CPP/Unity/AoT.
Abra um problema
Junte-se ao meu Discord (provavelmente o melhor para ajuda direta individual)
Certifique-se de ler Perguntas frequentes e Otimização e armadilhas