2

これはかなり単純なユースケースのようです。次のコードスニペットの例外がどのようにスローされるのかわかりません。

static void Main(string[] args)
{
    using (var foobar = new MemoryStream())
    {
        ProtoBuf.Serializer.Serialize(foobar, new Foobar());
        if (foobar.Length == 0)
            throw new Exception("Didn't serialize");
    }
}

[ProtoContract]
public class Foobar
{
    [ProtoMember(1)]
    public int FoobarInt { get; set; }
}
4

1 に答える 1

1

ProtoBuf はちょっと奇妙です...ゼロ長のシリアル化された形式は、それ自体は「エラー」ではありません...

次のように考えてください。

ストリームを*デ*シリアル化し、シリアル化しようとした空のオブジェクトを取得したい場合は、空のストリームで十分です(つまり、オブジェクトの「新しい」は同じことを行います)が、オブジェクトにデータセットがある場合、実際に物を保存/ロードする必要があります

static void Main(string[] args)
{
    using (var foobar = new MemoryStream())
    {
        var foo = new Foobar() { FoobarInt = 1 };
        ProtoBuf.Serializer.Serialize(foobar, foo);
        if (foobar.Length == 0)
            throw new Exception("Didn't serialize");
    }
}

[ProtoContract]
public class Foobar
{
    [ProtoMember(1)]
    public int FoobarInt { get; set; }
}

のバイト配列を生成するようになりました0x08, 0x01

于 2013-01-30T22:48:51.167 に答える