我试图使用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。
由于
答案 0 :(得分:1)
这里的正确答案是使用ProtoInclude来告诉它有关子类型的信息。否则,它仅相对于“子”进行序列化,并且没有任何有趣的数据(默认情况下零不计数)零长度流是正确的序列化。 Protobuf并不排除空流。
如果您不能使用ProtoInclude,因为在编译时不知道该类型,那么您可以使用;
RuntimeTypeModel.Default[typeof(parent)]
.AddSubType(number, typeof(child));
请注意,“number”必须以后可以准确重复,否则它不会正确反序列化。