c# - protobuf-net 中枚举的二进制表示

标签 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 中标志枚举的二进制表示形式如何?

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

我还在这里找到了 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/

相关文章:

java - 为单元测试序列化对象

c# - 如何使用 LINQ 从字符串中选择标记?

c# - 为什么表达式末尾的重复分号和更多分号不会导致 Visual Studio 编译器出错?

c# - 静态类如何从对象派生?

wcf - 如何在不需要服务证书的情况下创建 WCF 服务?

java - 是否可以在 Python 中创建与类成员持久性状态类似的行为,如使用 Java 'transient' 关键字所做的那样?

c# - Automapper:我需要为实体的每个副本调用 "CreateMap"- DTO?

wcf - certmgr.exe 命令实用程序位置

visual-studio-2008 - Visual Studio 2008 是否使用 SvcUtil.exe,如果 "No"使用 svcutil 有什么缺点吗?

c# - 如何让 Json Serialize 忽略字典键