protobuf-net不反序列化0

toa*_*ven 2 c# protobuf-net

我使用C#protobuf网r278,我只是注意到,如果我有一个类int字段,字段不正确,如果它的值设置为0,即反序列化,反序列化时,它会从它的默认值类定义.示例类:

[ProtoBuf.ProtoContract]
public class
Test
{
    [ProtoBuf.ProtoMember(1)]
    public int Field1 = -1

    [ProtoBuf.ProtoMember(2)]
    public int Field2 = -1;
}
Run Code Online (Sandbox Code Playgroud)

然后运行以下代码:

var test = new Test();
test.Field1 = 0;
test.Field2 = 0;
MemoryStream ms_out = new MemoryStream();
ProtoBuf.Serializer.Serialize(ms_out, test);
ms_out.Seek(0, SeekOrigin.Begin);
var deser = ProtoBuf.Serializer.Deserialize<Test>(ms_out);
Run Code Online (Sandbox Code Playgroud)

当我这样做,deser有Field1 = -1和Field2 = 2,而不是0.我在这里做错了吗?

Mar*_*ell 5

与wire-spec一致,有一个隐含的零默认值(可以更改为其他值[DefaultValue(...)].您可以通过设置IsRequired = true属性告诉它按照您的意愿运行:

[ProtoBuf.ProtoMember(1, IsRequired = true)]
Run Code Online (Sandbox Code Playgroud)