protobuf-net 什么时候需要使用 ProtoEnum 属性?

When does the ProtoEnum attribute need to be used for protobuf-net?

可用于修饰枚举成员的protobuf-net includes a [ProtoEnum] 属性。何时以及如何使用它?

在正常的使用场景中,enum 成员序列化似乎工作得很好(只要 enum 本身有一个 [ProtoContract] 装饰它)。

你唯一需要的时候是:

  1. 当您使用 .proto => C# 或 C# => .proto,并且您希望 .proto 中的名称与实际的 enum 声明不同
  2. 当您出于某种原因想要将线路上的数字 映射到类型模型 中的数字 时,即 enum 在线路上 12 的值(对于相同数据的其他用户)将更有用 20 以某种方式对您的应用程序

我通常强烈反对第二种选择;它让事情变得太复杂,and 这意味着它需要在两个方向上应用额外的逻辑。现在 "proto3" 改变了无法识别的值的预期行为,尤其如此;在 "proto2" 中,这意味着指示错误,但在 "proto3" 中,您只能获取该值。如果您正在应用地图,则无法执行此操作。