C# protobuf net不适用于哪些场景?

C# protobuf net不适用于哪些场景?,c#,protobuf-net,C#,Protobuf Net,我们已经在C#应用程序中使用了二进制序列化,但是需要序列化的类的大小和复杂性导致了缓慢(反)序列化和大文件 我们怀疑我们应该编写自己的自定义序列化程序;但是protobuf net声称它比标准的.net二进制序列化具有显著的速度和大小优势,并且可能比大量定制序列化程序更容易添加到我们的应用程序中 在花费大量的时间和精力试图让它为我们工作之前,我很想知道是否有任何交易破坏者。我们正在使用接口定义的属性、抽象子类的通用列表、自定义位标志枚举等。什么会阻止protobuf net为我们工作 当您必须与

我们已经在C#应用程序中使用了二进制序列化,但是需要序列化的类的大小和复杂性导致了缓慢(反)序列化和大文件

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


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

当您必须与现有软件/现有标准交互时,这是不合适的。例如,您不能使用它与SMTP服务器通信。

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

  • v1不太擅长基于接口的属性(即
    ICCustomer
    等);我正在努力在v2中改进这一点
  • v1喜欢有一个无参数构造函数(v2中取消了此要求)
  • 您需要告诉它如何将模型映射到字段;在v1中,这需要在类型上进行修饰(或者有一个选项可以从名称等推断出一些东西);在v2中,这可以在外部完成
  • 在v1中,标志枚举是一种痛苦;在v2中,有一个选项可以将枚举作为原始整数传递,这使它更适合FALG
  • 抽象和继承很好,但是您必须能够提前确定所有具体类型(将它们映射到整数键)
  • 仿制药应该可以
  • 没有中间类型的交错数组/嵌套列表是不合适的-您可以通过在中间引入一个中间类型来填充这一点
  • 并非所有核心类型都具有内置支持(例如,新的日期/时间偏移类型);在“v2”中,如有必要,您可以为此引入自己的垫片
  • 它是一个序列化程序,而不是序列化程序;我有一些想法,但还没有实施

如果您想要序列化的内容有一些有限的示例,我很乐意看看它是否可行(我是作者)。

请在about protobuf net上阅读此内容,引用

What’s the catch? In the most part, that’s it. WCF will use protobuf-net for any suitable objects (data-contracts etc). Note that this is a coarser brush than the per-operation control, though (you could always split the interface into different endpoints, of course). Also, protobuf-net does have some subtle differences (especially regarding empty objects), so run your unit tests etc. Note that it only works on the full-fat WCF; it won’t help Silverlight etc, since it lacks the extension features – but that isn’t new here. Finally, the resolver in WCF is a pain, and AFAIK wants the full assembly details including version number; so one more thing to maintain when you get new versions. If anyone knows how to get around this? 有什么问题吗? 在大多数情况下,就是这样。WCF将使用protobuf网络处理任何合适的问题 对象(数据合同等)。请注意,这是一个比 但是,每个操作控件(您始终可以将接口拆分为 当然,不同的端点)。 另外,protobuf网络也有一些细微的差别(特别是关于空的) 对象),所以运行单元测试等。 请注意,它仅适用于全脂WCF;这对Silverlight等没有帮助,因为 它缺少扩展特性,但这在这里并不新鲜。 最后,WCF中的解析器是一个难题,AFAIK需要完整的组装细节 包括版本号;因此,当您获得新版本时,还有一件事需要维护。 如果有人知道如何避开这件事?
所以那v2进展如何?;)@约尔-尤格;我被新的“聊天”系统束缚了好几年,好几个星期都没看它了;我需要找时间完成它。这真的很接近完成(估计约95%)。你的意思是,如果两个对象在一个字段中引用同一个对象会有问题吗?这句话主要是关于WCF插件的-protobuf-net.Ahhh k的一小部分。。。。好吧,你得到了你的选票!;)好极了,马克。。。。我必须研究一下这个协议网络……因为我一直想研究一个项目,但因为其他事情,比如生活,我一直把它放在次要位置!!:P