对于哪些情况,protobuf-net不合适?

Joe*_* Gö 5 c# protobuf-net

我们一直在使用BinarySerialization和我们的C#app,但是需要序列化的类的大小和复杂性导致了sloooooow(de)序列化和大文件.

我们怀疑我们应该编写自己的自定义序列化程序; 但是protobuf-net声称比标准.Net二进制序列化具有显着的速度和大小优势,并且可能比大量的定制序列化器更容易添加到我们的应用程序中.

在花费大量时间和精力试图让它为我们工作之前,我很想知道是否有任何交易破坏者.我们正在使用通过接口定义的属性,抽象子类的通用列表,自定义位标记枚举等等.什么会阻止protobuf-net为我们工作?

Mar*_*ell 6

protobuf-net尽其所能遵守核心protobuf规范,然后一些(例如,它包括继承),但是:

  • v1不是很擅长基于接口的属性(即ICustomer等); 我正在努力在v2中改进这个
  • v1喜欢那里有一个无参数构造函数(这个要求在v2中解除)
  • 你需要告诉它如何将模型映射到字段; 在V1这需要的类型的装饰(或存在从名称等推断出一些事情的一个选项); 在v2中,这可以在外部完成
  • 在v1中,标志枚举是一种痛苦; 在v2中,有一个选项可以将枚举作为原始整数传递,使其更适合于falgs
  • 摘要和继承都很好,但您必须能够提前确定所有具体类型(将它们映射到整数键)
  • 仿制药应该没问题
  • 没有中间类型的锯齿状数组/嵌套列表也不行 - 您可以通过在中间引入中间类型来对此进行填充
  • 并非所有核心类型都具有内置支持(例如,新的日期/时间偏移类型); 在"v2"中,如果需要,您可以为此引入自己的垫片
  • 它是序列化器,而不是图形序列化器; 我有一些想法,但还没有实现

如果你想要序列化的例子有限,我很乐意看看它是否可行(我是作者).