目前我们正在使用带有 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 中标志枚举的二进制表示形式如何?
它如何处理未定义的枚举值(例如读|写)?
我还在这里找到了 Marc Gravell 的一些相关答案,但它可能已经过时了(2009): Error while using ProtoBuf-Net with flags enum
最佳答案
标记为[Flags]
的枚举作为直整数发送,以避免未正式定义的标志组合出现问题(protobuf 规范描述了枚举,但没有定义按位组合)。阅读 | Write 是整数 3,它被 varint 编码为单个字节,并按原样发送。 varint-encoding 的详细信息如下:https://developers.google.com/protocol-buffers/docs/encoding#varints
关于c# - protobuf-net 中枚举的二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726405/