我有一个这样的继承链:
[ProtoContract]
public abstract class Message
{
[ProtoMember(1, OverwriteList = true)]
public List<Header> Headers {get; set;}
}
[ProtoContract]
public class EventMessage<T> : Message
{
[ProtoMember(2)]
public T Event {get; set;}
}
继承链非常简单(我的。为了让 Headers 包含在序列化中,我需要这样做:
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<PayloadType>));
我知道这种答案(上一行)已经记录在很多 StackOverflow 帖子中。但是,我不喜欢这种设计,因为我需要提前声明我所有的子类型,这也意味着有限的、少量的子类型。
我正在尝试在我的应用程序中编写消息总线,使用 protobuf-net 进行序列化/反序列化。消息总线需要发送“事件”并响应请求/回复。由于我的系统中有很多(很容易 > 100)事件,我不想为 RuntimeTypeModel 中的每个封闭的泛型类型声明一个子类型。
protobuf-net 是否有能力推断子类型/类?或者理想情况下,我想要类似的东西:
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<>));
(我试过但它不起作用)。