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

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

最佳答案

我怀疑它们实际上是2种不同的情况,但是对于Andrew添加的代码示例,这是因为它无法(事先)弄清楚默认值的处理方式(默认情况下,数据是在接收方视为可选)。有3种解决方法:

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

public enum SiteType
{
    Error = 0,
    ...


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

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


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

[ProtoMember(10, IsRequired = true)]
public SiteType Type { get; set; }

10-08 05:14