给出一个如下所示的.proto:
message Base {
string Dummy = 1
}
message Derived {
Base Super = 1
string Parp = 2
}
......还有一些C#之类的东西:
public class Base {
public string Dummy;
}
public class Derived : Base {
public string Parp
}
如何在protobuf-net中自定义序列化以便能够做到这一点?最初我开始考虑使用TypeModel并为Base MetaType调用AddSubType,但是它似乎为Base创建了所有派生类的可选字段的类型定义(即与我要求的相反)
我以为自己可以自己走层次结构,但是看看TypeModel,它似乎支持将类型提供给Deserialise,但它在序列化期间使用了value.GetType()。即便如此,我还不清楚如何做到这一点。我唯一的选择是使用ProtoWriter手动编写每个字段吗?这就是我目前的尝试,但我希望有一种更简单的方法。
答案 0 :(得分:2)
首先要注意的是protobuf本身不支持继承。这没有“官方”布局。 Protobuf-net不会按照您的方式支持序列化:选择子类型封装(而不是基本类型封装)来解决几个问题,包括:
但是,你可以手动映射DTO,基本上你的DTO层根本不使用继承。