protobuf-net枚举序列化

Kim*_*imi 14 enums protocol-buffers protobuf-net

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

"System.InvalidOperationException:只能处理数据协定类(以及此类的列表/数组)"

Mar*_*ell 17

怀疑它们实际上是两种不同的场景,但是对于安德鲁添加的代码示例,这是因为它无法弄清楚(提前)它将对默认值做什么(默认情况下,数据是在接收器处视为可选).有三种方法可以解决这个问题:

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

public enum SiteType
{
    Error = 0,
    ...
Run Code Online (Sandbox Code Playgroud)

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

[ProtoMember(10), DefaultValue(SiteType.Partition)]
public SiteType Type { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }
Run Code Online (Sandbox Code Playgroud)