在使用ProtoBuf-Net并序列化枚举属性时,枚举设置为[FlagsAttribute],在序列化由多个标志组成的枚举值时收到以下错误消息.
错误是:值(MyEnum.MyValue)没有属性MyProperty的线表示
MyEnum在哪里:
[Flags]
public Enum MyEnum
{
MyValue = 0,
MyValue1 = 1,
MyValue2 = 2,
MyValue4 = 4,
MyValue8 = 8,
}
Run Code Online (Sandbox Code Playgroud)
和
MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4;
Run Code Online (Sandbox Code Playgroud)
似乎是protobuf-net中的一个bug?
[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}
Run Code Online (Sandbox Code Playgroud)
最终,协议缓冲区有线格式不为 [Flags] 枚举提供任何范围 - 它针对谨慎的集合强制执行枚举值。我可以很容易地做到这一点,但是:
一个更简单的方法可能是在你的代码中做一个垫片:
public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
get {return (int)MyValue;}
set {MyValue = (MyEnum)value;}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是代表您添加一个与上述类似的标志;将其视为 int 而不是枚举。
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |