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 有点奇怪......零长度序列化形式本身并不是“错误”......

这样想:

如果你想 *de*serialize 一个流并获得你试图序列化的空对象,一个空流就足够了(即,对象的“新”会做同样的事情)但是如果对象上有任何数据集,现在您需要实际保存/加载内容

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 回答