c# - 扩展 Protocol Buffer 以使用现有协议(protocol)?

标签 c# serialization code-generation protocol-buffers protobuf-net

据我了解,Protocol Buffers 主要用于同时控制服务器和客户端代码的项目。我的一般问题是 - Protocol Buffers 可以用于将二进制消息序列化/反序列化到使用现有协议(protocol)的服务器吗?所以,我的问题:

  1. Protocol Buffers 本身是否支持在文本文件中定义消息然后指定如何序列化/反序列化的功能?例如,假设整数在服务器上是大端,在客户端是小端。是否有任何原生关键字会考虑到这一点?另一个例子 - 如果一个字符串作为字符串中每个字符的一个字节传递并且具有固定长度或使用 2 个字节来指定长度,是否有一个本地关键字来指定它以便正确完成序列化/反序列化?

  2. 如果 Protocol Buffers 不支持任何方式来本地微调应该如何为现有协议(protocol)完成序列化/反序列化,那么是否可以通过扩展添加该功能? 可以以某种方式添加序列化/反序列化方法可以识别的关键字吗?也许这可以通过扩展或修改 protobuf-csharp-port 或 protobuf-net 中的代码来完成? .proto 文件可以使用一种称为序列化类型的新型关键字,可用于指定字段的序列化行为类型。 如果实现序列化类型的方法被实现为公共(public)虚函数,那么自定义类可以覆盖该行为以进行专门处理。我唯一能想到的另一件事是,由于 Protocol Buffer 使用模式,它可以在处理来自服务器的消息时使用它,但不应该尝试将它发送到服务器或期望来自服务器的任何类型的模式消息服务器。是否需要做任何其他事情才能使所有这些都与 Protocol Buffer 一起工作?

  3. 在此link , protobuf-csharp-port 和 protobuf-net 进行了比较。看起来 protobuf-net 更快。但是,哪种实现最适合实现新的序列化类型,该类型可用于微调对类型的序列化/反序列化方式的控制?

  4. 如果您认为将此功能包含在 Protocol Buffers 中不合适,那么是否有任何 API 可以获取包含二进制消息描述的文本文件并将其转换为 C#正确执行序列化和反序列化的类?我已经熟悉 API XSD2Code,它对 XML 文件进行序列化/反序列化。但这在这里没有帮助,因为数据是二进制的,而不是 XML。

最佳答案

1: 不,protocol buffers 是单一定义的格式;有一些不同的选项(varint vs 固定长度 vs zigzag),但是:不是你想要的

2:没有

3:不适用,2

我不能评论 4

关于c# - 扩展 Protocol Buffer 以使用现有协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234366/

相关文章:

c# - double 加法的交换律

c# - 如何将对象保存到 Visual Studio 中的 fooSettings.settings 文件?

parsing - 跨包使用 go/parser

php - 功能与重复代码

c# - WCF - 从接口(interface)契约重新生成客户端代码

c# - 如何在不使用关键字的情况下使用枚举实例化对象时编写更清晰的代码?

c# - 如何添加 2 或 3 秒的延迟

c# - 我认为我的 SerialPort 对此 ObjectDisposedException 负责,但我不知道它发生在哪里

c# - 复制对象属性 : reflection or serialization - which is faster?

java - 从一项 Activity 传递对象时出现问题