Marc在stackoverflow上提到,在protobuf-net的v2中,可以使用ProtoInclude属性(或类似的方法)来序列化/反序列化类层次结构,而无需在基类中指定每个子类型.这是实现了吗?我们有一个可以在外部库中派生的插件接口,因此无法知道派生类型是什么.我们可以在类型之间保持唯一的编号,但我在网上找不到任何示例,缺少使用ProtoInclude属性,需要指定子类型.
如果我不知道子类型是什么,我将如何使用protobuf-net实现继承?
[DataContract] public class Foo
{
[DataMember(Order = 1)] public int FooId { get; set; }
}
[DataContract] public class Bar : Foo
{
[DataMember(Order = 2)] public string Name { get; set; }
}
[DataContract] public class Baz : Bar
{
[DataMember(Order = 3)] public string BazName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,在代码中我设置了一个新的TypeModel并添加了我的子类型
_ProtobufSerializer = TypeModel.Create();
_ProtobufSerializer.Add(typeof(Bar), true);
_ProtobufSerializer.Add(typeof(Baz), true);
var type = _ProtobufSerializer.Add(typeof(Foo), true);
type.AddSubType(100, typeof(Bar));
type.AddSubType(101, typeof(Baz));
Run Code Online (Sandbox Code Playgroud)
现在,我可以将Foo,Bar和Baz的实例序列化.如果我序列化
var listThatWorks = new List<Foo> { new Foo { FooId …Run Code Online (Sandbox Code Playgroud)