Jan*_*sky 5 c# serialization protocol-buffers protobuf-net
我正在使用Protobuf.net来序列化一些类.我希望能够序列化SuperHero类(如下),而无需在基类上指定[ProtoInclude].这是因为派生类是自动生成的,但基类不是,因此基类不直接知道它的派生类.
[ProtoContract]
class Person
{
[ProtoMember(1)]
public int Id { get; set; }
[ProtoMember(2)]
public string Name { get; set; }
}
[ProtoContract]
class SuperHero : Person
{
[ProtoMember(3)]
public string Powers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我使用的是最新版本的protobuf.net.
首先注意:在某些时候,您的代码必须知道子类 - 可能通过配置.重要的是,您能够以某种方式可靠地为每个子类型重现数字.如果要将数据存储到磁盘等,则在运行时找到类型时递增计数器是不够的,因为下次运行时可能找不到相同顺序的类型.所以; 让我们假设通过某种机制,你有一个唯一的正整数,代表SuperHero作为Person的子类:
int tag = 7; // why not
Type subType = typeof(SuperHero);
Run Code Online (Sandbox Code Playgroud)
然后,告诉protobuf-net关于这个子类型:
RuntimeTypeModel.Default.Add(typeof(Person), true).AddSubType(tag, subType);
Run Code Online (Sandbox Code Playgroud)
这相当于属性处理代码在看到时所执行的操作 [ProtoInclude(...)]