protobuf-net 枚举序列化

2023-12-22

为了使用 protobuf-net 序列化枚举,需要做什么?当序列化具有枚举属性的类时,我收到以下错误,如果从属性声明中删除 DataMember 属性,则它可以正常工作。

“System.InvalidOperationException:仅数据契约类(和列表/数组 的这样)可以被处理”


I suspect它们实际上是两种不同的场景,但对于 Andrew 添加的代码示例,这是因为它无法(提前)弄清楚它将对默认值执行什么操作(默认情况下,数据被视为选修的在接收器处)。有 3 种方法可以解决此问题:

1:添加一个值为 0 的枚举(因为 0 始终是 CLI 的默认值),例如

public enum SiteType
{
    Error = 0,
    ...

2:告诉它默认使用哪个值:

[ProtoMember(10), DefaultValue(SiteType.Partition)]
public SiteType Type { get; set; }

3:告诉引擎它真的不需要担心它,即它is将有一个值:

[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

protobuf-net 枚举序列化 的相关文章

  • 定义一个数组,使用枚举变量作为数组大小

    使用枚举变量定义数组作为数组大小意味着什么 例如我有以下代码 typedef enum D ROM RDE GROUP 0 0x0 D ROM RDE GROUP 1 D ROM RDE MAX GROUPS E ROM RDE GROUP
  • 枚举内的枚举

    这不是我被卡住的问题 而是我正在寻找一种简洁的方式来编写我的代码 本质上 我正在编写一个事件驱动的应用程序 用户触发事件 事件被发送到适当的对象 然后对象处理事件 现在我正在编写偶数处理程序方法 我希望使用 switch 语句来确定如何处理
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • 为什么数组不符合 Equatable,而它的项在 Swift 中是 Equatable?

    UPDATE 从 Xcode 9 3 开始 包括斯威夫特 4 1 数组相等按预期工作 并且原始问题中的代码编译没有错误 然而 请查看已接受的答案 因为它提供了更好 更现代的解决方案 原问题如下 当我尝试声明类型为泛型枚举的实例时 Post
  • 重写 Java 枚举中的 valueof() 和 toString()

    我的价值观enum是需要在其中包含空格的单词 但枚举的值中不能包含空格 因此它们都聚集在一起 我想覆盖toString 在我告诉它的地方添加这些空格 我还希望枚举在使用时提供正确的枚举valueOf 在我添加空格的同一字符串上 例如 pub
  • 重写 java.lang.Enum.values() 上的 Javadoc 注释

    我对该方法有一个非常具体的问题java lang Enum http docs oracle com javase 6 docs api java lang Enum html values 我想覆盖它的javadoc 非常准确地 当前的
  • 迭代非增量枚举

    在你问之前 我已经looked https stackoverflow com questions 261963 c iterate through an enum and looked https stackoverflow com qu
  • 打字稿标记的枚举获取值

    我在下面标记了枚举 enum PermissionEnum SU 1 lt lt 0 1 Administrator 1 lt lt 1 2 User 1 lt lt 2 4 对于给定值 6 我怎样才能得到 string gt 管理员 用户
  • 限制类型安全异构容器中的键

    我想使用 Joshua Bloch 的 Effective Java 中描述的泛型类型安全容器模式 但想通过使用枚举来限制可用作键的类 以下是约书亚书中的代码 public class Favorites private Map
  • 如何在 Angular @Input 中仅接受预定义值

    我的问题是 我在 a 中收到一个字符串值作为组件的参数 但我想限制可以用作参数的值 就像enum I use Input type string 但是在组件中 一切都可以引入type正如我之前所说 我需要将其限制为 3 个选项 例如Enum
  • 如何将用户输入与枚举值映射?

    我有一个基本的enum宣言 enum Title Prof Dr Mr Mdm Mrs Miss NA 我正在尝试将用户输入 0 1 2 3 4 5 AnyNumber 映射为正确的值enum像这样 std map
  • Protobuf.net 异常 - 检查元数据时超时

    I am 有时尝试使用 protobuf net 反序列化对象时收到以下异常 我很惊讶 因为我从来没有超过一个线程同时反序列化同一个对象 并且 protobuf net 源似乎没有使用任何静态对象进行反序列化 该异常确实提出了一个解决方案
  • Java 中的泛型枚举

    我有一个基本的 Configuration 类 它在枚举中提供所有可能的键和相应值类型的类型 如下所示 public class Configuration public static enum Key FIRST KEY actual k
  • 使用未命名枚举初始化的“static constexpr auto”数据成员

    我正在开发一个 C 11 项目 仅使用clang 3 4 并决定使用编译g 4 8 2以防产生的错误有任何差异 事实证明 g 拒绝了 clang 接受的一些代码 我已将问题简化为下面给出的 MWE enum a template
  • 如何将 ENUM 值从视图转换为字符串到控制器

    所以我已经知道如何获取字符串 整数 十进制 现在我在枚举的这一部分中苦苦挣扎 如何将枚举转换为字符串 Enum statecode apsp Customer BillingAddress StateCode Value Customer
  • 将 Protobuf 消息持久保存到数据库

    保存使用 protobuf3 定义的数据的正确方法是什么 我使用 golang 和 Java 两者都支持 ORM 在 java 中使用 Hibernate 在 golang 中使用 gorm 这两个地方我都需要将生成的代码转换为相应的实体模
  • Enum.GetName 与 Enum.ToString

    对于这个枚举 Enum MyEnum Value End Enum 有两种方法获取名称表示Value of MyEnum Value Enum GetName GetType MyEnum MyEnum Value aka Enum Get
  • 无法在 Java 中反序列化来自 C++ 的 protobuf 数据

    我的问题是在 C 中序列化 protobuf 数据并可能在 Java 中反序列化数据 这是我根据 dcn 给出的提示使用的代码 这样 我用 C 创建了 protobuf 数据并将其写入通过套接字发送的 ostream Name name n
  • 如何在 Django 模型中使用枚举作为选择字段?

    我有一个模型类 我希望其中两个字段成为选择字段 因此为了填充这些选择 我使用了如下列出的枚举 models py class Transaction models Model transaction status models CharFi
  • 在对具有多个对应名称的枚举值调用 ToString() 时,什么决定选择哪个名称?

    呼叫时选择哪个名字由什么决定ToString on an enum value which has multiple corresponding names 以下是问题的长期解释 我已确定这不是由以下任何一个唯一决定的 字母顺序 报关单 也

随机推荐