次のような継承チェーンがあります。
[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;}
}
継承チェーンは非常に簡単です (my .ヘッダーをシリアル化に含めるには、次のことを行う必要があります。
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<PayloadType>));
この種の回答 (上記の行) は、かなりの数の StackOverflow 投稿で文書化されていることを知っています。ただし、この設計は好きではありません。すべてのサブタイプを事前に宣言する必要があり、限られた少数のサブタイプを暗示しているからです。
シリアライゼーション/デシリアライゼーションに protobuf-net を使用して、アプリケーションでメッセージ バスをコーディングしようとしています。メッセージ バスは「イベント」を送信し、要求/応答に応答する必要があります。私のシステムには多くの (簡単に 100 を超える) イベントがあるため、RuntimeTypeModel でクローズされたジェネリック型ごとにサブタイプを宣言したくありません。
protobuf-net にはサブタイプ/クラスを推測する機能がありますか? または理想的には、次のようなものが欲しいです:
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<>));
(私が試しましたが、うまくいきません)。