在使用ProtoBuf-Net并序列化枚举属性时,枚举设置为[FlagsAttribute],在序列化由多个标志组成的枚举值时收到以下错误消息。
错误是:值(MyEnum.MyValue)没有属性MyProperty的电线表示
MyEnum 的位置是:
[Flags]
public Enum MyEnum
{
MyValue = 0,
MyValue1 = 1,
MyValue2 = 2,
MyValue4 = 4,
MyValue8 = 8,
}
和
MyProperty = MyEnum.MyValue2 | MyEnum.MyValue4;
似乎是protobuf-net中的一个错误?
答案 0 :(得分:4)
更新:现在已修复r274;你会用:
[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}
最终协议缓冲线 format不为[Flags]枚举提供任何范围 - 它强制执行枚举值 谨慎的一套。我可以轻松地允许这一点,但是:
更简单的方法是在代码中填写一个垫片:
public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
get {return (int)MyValue;}
set {MyValue = (MyEnum)value;}
}
另一种选择是在你的上面添加一个像上面那样工作的标志 代表;把它当作一个int而不是一个枚举。