protobuf-net和子类中的空属性

时间:2012-07-13 15:40:16

标签: protobuf-net

我试图使用protobuf-net并遇到以下问题。 我有两节课。

[ProtoContract]
class parent
{
    [ProtoMember(1)]
    public string name { get; set; }
}

[ProtoContract]
class child : parent
{
    [ProtoMember(2)]
    public int num { get; set; }
}

如果我创建了一个子对象而没有设置子属性“num”

var obj = new child() { name = "tester" };

并尝试序列化

using (var stream = new MemoryStream())
{
    Serializer.NonGeneric.Serialize(stream, obj);
}

流将为空。

有没有办法处理这种情况而不使用父类的[ProtoInclude]属性?
我正在使用protobuf-net v2 r480。

由于

1 个答案:

答案 0 :(得分:1)

这里的正确答案是使用ProtoInclude来告诉它有关子类型的信息。否则,它仅相对于“子”进行序列化,并且没有任何有趣的数据(默认情况下零不计数)零长度流是正确的序列化。 Protobuf并不排除空流。

如果您不能使用ProtoInclude,因为在编译时不知道该类型,那么您可以使用;

RuntimeTypeModel.Default[typeof(parent)]
    .AddSubType(number, typeof(child));

请注意,“number”必须以后可以准确重复,否则它不会正确反序列化。