protobuf网中枚举的二进制表示

时间:2014-02-12 11:16:15

标签: c# wcf serialization enums protobuf-net

目前我们正在使用带有NetTcpBinding的WCF服务。我们确实有一个具有枚举作为属性的数据对象。我们已经想到,开箱即用的这些值被序列化为字符串表示,请在此处查看: How do I serialize an enum value as an int?

我们确实希望避免这种情况,因为这只是通信开销!

由于我们要尽快将序列化切换到protobuf-net,所以我问自己,定义一个额外的整数属性是否值得花费时间。我们有几个枚举,例如

[Flags]
public enum Permission
{
    None = 0,
    Read = 1,
    Write = 2
}

如何在线上的protobuf-net中标记枚举的二进制表示?

它如何处理未定义的枚举值(例如Read | Write)?

我也在这里找到了Marc Gravell的一些相关答案,但它可能已经过时(2009年): Error while using ProtoBuf-Net with flags enum

1 个答案:

答案 0 :(得分:2)

标记为[Flags]的枚举将作为直整数发送,以避免未正式定义的标志组合问题(protobuf规范描述了枚举,但未定义按位组合)。阅读| Write是整数3,它是varint编码为单个字节,并按原样发送。 varint-encoding的详细信息详见:https://developers.google.com/protocol-buffers/docs/encoding#varints