gpt4 book ai didi

c# - 使用带有标志枚举的 ProtoBuf-Net 时出错

转载 作者:太空狗 更新时间:2023-10-29 23:27:48 25 4
gpt4 key购买 nike

在使用 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 中的错误?

最佳答案

更新:现在已在 r274 中修复;你会使用:

[ProtoMember(12, DataFormat = DataFormat.TwosComplement)]
public MyEnum MyValue {get;set;}

最终 Protocol Buffer 线格式不为 [Flags] 枚举提供任何范围 - 它强制执行枚举值谨慎的集合。我可以很容易地允许这样做,但是:

  • 在这种情况下,我可能不得不禁用枚举映射,或者做很多丑陋的事情-匹配工作
  • 它不会严格兼容

一个更简单的方法可能是在您的代码中做一个垫片:

public MyEnum MyValue {get;set;}
[ProtoMember(12)]
private int MyValueWire {
get {return (int)MyValue;}
set {MyValue = (MyEnum)value;}
}

另一种选择是在您的代表;将其视为一个整数而不是一个枚举。

关于c# - 使用带有标志枚举的 ProtoBuf-Net 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com