2

C# で protobuf-net r278 を使用していますが、intフィールドを持つクラスがある場合、値が 0 に設定されているとフィールドが適切に逆シリアル化されないことに気付きました。つまり、逆シリアル化すると、デフォルト値が取得されます。クラス定義。クラスの例:

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

    [ProtoBuf.ProtoMember(2)]
    public int Field2 = -1;
}

次に、次のコードを実行します。

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);

これを行うと、0 ではなくとdeserがあります。ここで何か間違ったことをしていますか?Field1 = -1Field2 = 2

4

1 に答える 1

5

wire-spec に沿って、暗黙のゼロ デフォルトがあります (これは で他の値に変更できます。属性[DefaultValue(...)]を設定することで、必要に応じて動作するように指定できます。IsRequired = true

[ProtoBuf.ProtoMember(1, IsRequired = true)]
于 2010-03-05T19:25:14.203 に答える