【问题标题】:Binary representation of an enum in protobuf-netprotobuf-net 中枚举的二进制表示
【发布时间】:2014-02-12 11:16:14
【问题描述】:

目前我们正在使用带有 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中flags enum的二进制表示如何?

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

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

【问题讨论】:

    标签: c# wcf serialization enums protobuf-net


    【解决方案1】:

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

    【讨论】:

    • 这很清楚!所以我假设你 2009 年的回答已经过时了?
    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2011-04-17
    相关资源
    最近更新 更多