Protobuf net protobuf net和子类中的空属性

Protobuf net protobuf net和子类中的空属性,protobuf-net,Protobuf Net,我试图使用protobuf网络,但遇到了以下问题。 我有两节课。 [协议] 班级家长 { [原成员(1)] 公共字符串名称{get;set;} } [原始合同] 类子:父 { [原成员(2)] 公共int num{get;set;} } 如果我创建一个子对象而不设置子属性“num” var obj=new child(){name=“tester”}; 并尝试序列化它 使用(var stream=new MemoryStream()) { Serializer.NonGeneric.Ser

我试图使用protobuf网络,但遇到了以下问题。 我有两节课。

[协议]
班级家长
{
[原成员(1)]
公共字符串名称{get;set;}
}
[原始合同]
类子:父
{
[原成员(2)]
公共int num{get;set;}
}
如果我创建一个子对象而不设置子属性“num”

var obj=new child(){name=“tester”};
并尝试序列化它

使用(var stream=new MemoryStream())
{
Serializer.NonGeneric.Serialize(流,obj);
}
溪流将是空的

有没有办法在不使用父类的属性[ProtoInclude]的情况下处理这种情况?
我用的是ProtobufNetv2R480

谢谢

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

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

RuntimeTypeModel.Default[typeof(parent)]
    .AddSubType(number, typeof(child));
请注意,“number”以后必须能够准确地重复,否则它将无法正确地反序列化。

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

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

RuntimeTypeModel.Default[typeof(parent)]
    .AddSubType(number, typeof(child));
请注意,“number”以后必须能够准确地重复,否则无法正确反序列化