将 ProtoBuf-Net 与标志枚举一起使用时出错

2023-11-26

在使用 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(使用前将#替换为@)

将 ProtoBuf-Net 与标志枚举一起使用时出错 的相关文章

  • LINQ - 与 Group By 结合并获得平均值

    SQL SELECT DeptId avg Marks FROM StudentTb s JOIN StudInDepartment d on s StudentId d StudentId GROUP BY DeptId 转换为 Linq
  • 在构造函数期间关闭表单

    是否可以在构造函数执行时关闭表单 或者只是在这个阶段停止显示 我有以下代码 public partial class MyForm Form public MyForm if MyFunc this Close 这会在 Main 中抛出 O
  • 向 std::cout 添加“提示”消息的最佳方法

    我正在寻找向所有消息添加自定义初始消息的最佳方法std cout or std cerr 打印到控制台 文件输出 例如 如果我设置这个自定义提示消息将是字符串 Log 那么一个经典的 std cerr lt lt This is a log
  • 为什么我们需要创建类变量来获取和设置属性?

    非常简单的问题 但我发现理解我们为什么这样做非常重要 我可以在类中创建一个属性 如下所示 第一种方法 public class MyClass public string MyProperty get set 第二种方法 public cl
  • 信号发送到子进程和父进程

    据我了解 发送到父进程的信号不应发送给子进程 那么为什么在下面的示例中 SIGINT 会同时到达子级和父级呢 include
  • struct tm->tm_yday 是否给出了正确的闰年值?

    假设我想获取自 1 月 1 日以来经过的天数 这会返回闰年的正确值吗 struct tm now tm struct timeval tv time t currtime gettimeofday tv NULL currtime tv t
  • Excel 在 CSV 导出中添加额外的引号

    我最近创建了一个应用程序 它通过 CSV 将项目添加到数据库 添加项目后 我意识到我的很多值都有不需要的额外引号 这扰乱了我的排序 问题是 当从 Excel 导出到 CSV 时 Excel 会向我所有已包含引号的值添加额外的引号 我在下面展
  • 如何在 std::map 声明上声明自定义排序函数?

    容器std map始终根据键的值对键进行排序 例如 是否可以根据声明时设置的位数进行排序 我有一个计算设置位的函数 for size t i 0 i lt CHAR BIT sizeof value i value gt gt 1 if v
  • C“int”的大小是2字节还是4字节?

    C中的整数变量占用2个字节还是4个字节 它取决于哪些因素 大多数教科书都说整型变量占用2个字节 但是当我运行一个打印整数数组的连续地址的程序时 它显示了 4 的差异 我知道它等于sizeof int 的大小int确实依赖于编译器 回到过去
  • .Net Core 1.1 上的 OData v4 缺少 /$metadata

    使用 net Core 1 1 和 Microsoft AspNetCore OData 库 我能够让 OData 端点与我的简单控制器配合使用来执行 get expand 和其他查询 但是 我无法让它返回要返回的 metadata 这个问
  • 在ubuntu中安装pyinterval

    我正在尝试安装 python 库 pyinterval 它需要 crlibm C 标头 我已安装该标头 没有错误 但似乎是问题的根源 当我跑步时 sudo easy install pyinterval 我得到以下信息 Searching
  • Windows 上的 C++ 分析器 [重复]

    这个问题在这里已经有答案了 我刚开始使用 C 有时我不知道我的编译器有多喜欢算法的两种不同实现 有没有simple我可以使用工具来查看我的代码执行需要多长时间 编辑 我使用 gcc 编译器 Free 很困 http www codersno
  • 为什么 C++ 中的“按 Enter 继续”代码不起作用?

    所以 我正在用 C 为孩子们制作一个简单的测验程序 我真的是一个编程初学者 我想要做的是要求用户在第一个问题后按 Enter 键 并且只有按 Enter 键后 第二个问题才可见 但由于某些原因 C 不会等待用户在 cin 语句中输入输出 而
  • 铸造泛型和泛型类型

    考虑一下 我有以下 3 个类 接口 class MyClass
  • C++内联汇编:如何处理引用?

    如何处理内联汇编器中函数的引用 我正在尝试这个 void foo int x asm mov x 10 int main int x 0 foo x std cout lt lt x lt lt std endl 但是函数执行后 x 仍然是
  • 当下载线程之一终止时解锁 FIleStream

    我通过例如下载文件5 个线程 当其中一个线程完成下载文件部分时 它被中止 但所有其余线程都有 ThreadState WaitSleepJoin 并且显然停止下载 怎么解决呢 while bytesSize responseStream R
  • 从代码隐藏中以编程方式关闭 aspx 页面

    从代码隐藏中关闭 ASPX 页面的最佳方法是什么 我有一个按钮事件处理程序 我想在用户单击页面上的 ASP NET 按钮后关闭页面 我尝试以编程方式添加一个包含以下内容的 JavaScript 方法window close 命令至OnCli
  • 为我的 C++ 应用程序提供 SDK

    假设我正在用 C 创建一个游戏引擎 我只想提供一些标头而不是提供整个源代码 并且需要这些标头来创建新的游戏实例 提供脚本类 提供游戏对象类和组件 数学等 是的 显然我想为我的游戏引擎提供 SDK 但是如何做到这一点 如何仅提供一些公共标头并
  • 如何在 EXE 文件中找到要挂钩/绕行的函数地址?

    我又碰壁了 需要你帮助处理一些低级的事情 我已经成功挂钩导出的 DLL 函数 顺便说一句 用这个代码 https web archive org web 20100610091602 http newgre net ncodehook 通过
  • 将 ASP.NET 网站连接到 SQL 数据库

    我目前正在尝试在 ASP NET 网站项目和 SQL Server 2008 R2 构建的数据库之间建立连接 我需要这样做的方式是使用connectionString来自Web config页面 但我不知道要赋予它什么值或如何使用所述值建立

随机推荐