在使用 ProtoBuf-Net 并序列化枚举属性(其中枚举设置为 [FlagsAttribute])时,在序列化由多个标志组成的枚举值时,我收到以下错误消息。
错误是:值 (MyEnum.MyValue) 没有属性 MyProperty 的线表示
Where MyEnum is:
[Flags]
public Enum MyEnum
{
MyValue = 0,
MyValue1 = 1,
MyValue2 = 2,
MyValue4 = 4,
MyValue8 = 8,
}
and
MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4;
似乎是 protobuf-net 中的一个错误?
更新:此问题现已修复r274;你会使用:
[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}
最终协议缓冲区线
格式不为 [Flags] 枚举提供任何范围 - 它强制执行枚举值
谨慎的设置。我可以很容易地允许这一点,但是:
- 在这种情况下,我可能必须禁用枚举映射,或者做很多难看的事情 -
配套工作
- 它不会严格兼容
执行此操作的一种更简单的方法可能是在代码中执行填充:
public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
get {return (int)MyValue;}
set {MyValue = (MyEnum)value;}
}
另一种选择是添加一个与上面类似的标志
代表;将其视为 int 而不是枚举。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)