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();
}