目前我们正在使用带有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
答案 0 :(得分:2)
标记为[Flags]
的枚举将作为直整数发送,以避免未正式定义的标志组合问题(protobuf规范描述了枚举,但未定义按位组合)。阅读| Write是整数3,它是varint编码为单个字节,并按原样发送。 varint-encoding的详细信息详见:https://developers.google.com/protocol-buffers/docs/encoding#varints