C# 在protobuf net中序列化时,我有一个异常意外的子类型:exampleMespace.ClassB

C# 在protobuf net中序列化时,我有一个异常意外的子类型:exampleMespace.ClassB,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,我有以下代码 namespace Example { [ProtoContract] public class A : superclass { [ProtoMember(1)] public string propertyA {get; set;} [ProtoMember(2)] public dictionary<string,ClassB> cartLines {get; set;} } [ProtoContract] public class B : su

我有以下代码

namespace Example
{
[ProtoContract]
public class A : superclass
{
   [ProtoMember(1)]
  public string propertyA {get; set;}
  [ProtoMember(2)]
  public dictionary<string,ClassB> cartLines {get; set;}
}
[ProtoContract]
public class B : superclass
{
  [ProtoMember(1)]
  public string propertyA {get; set;}
  [ProtoMember(2)]
  public ClassA property {get; set;}
}


}

Serialize方法在protobuf net中序列化时抛出异常ExampleMaspace.ClassB。

XmlSerializer
[XmlInclude]
)和
DataContractSerializer
[KnownType]
)一样,基类型需要公布预期的子类型,因此:

[协议]
[包括(10,类型(B))]
公共A类{…}
使用的数字不能与
A
的任何字段冲突。请注意,如果您有一个
C:B
,那么
B
将需要通过一个属性来公布,并且所选的数字不能与
B
的任何成员冲突

(本质上,子类型被建模为
可选字段之一,这些字段是
消息

(有一些原因可以解释为什么最好注释基类型而不是子类型;但是它们不是很有趣)

 using (var stream = new MemoryStream())
            {
               
                Serializer.Serialize(stream, MyModel);
                srlData = stream.ToArray();
            }