すべて EventDto から継承する 20 ほどのイベント クラスがあります。これらのサブクラスはすべてシリアル化/逆シリアル化されます (DataContractJsonSerializer を使用し、各サブクラスが [KnownType(typeof(subclasstype))] 属性として追加されます)。逆シリアル化方法は次のようになります。
private EventDto DeserializeMessage(byte[] body)
{
var stream = new MemoryStream(body);
var serializer = new DataContractJsonSerializer(typeof(EventDto));
var eventDto = (EventDto)serializer.ReadObject(stream);
return eventDto;
}
イベントをデシリアライズした後、そのタイプに基づいて処理する必要があります。ので、私は持っています:
public void ProcessMessage(byte[] serializedEvent)
{
//Deserialize
var eventDto = DeserializeMessage(serializedEvent);
//Process
Process(eventDto);
}
public void Process(EventDto eventDto)
{
//Do nothing
}
public void Process(EventDtoSubclass1 eventDto)
{
//Do something
}
public void Process(EventDtoSubclass2 eventDto)
{
//Do something different
}
問題は、ProcessMessage() 内の eventDto の参照型が EventDto であるため、呼び出される Process() メソッドが常に同じになることです。EventDto のさまざまなサブクラスを区別して、適切なメソッドを呼び出せるようにする必要があります。
ProcessMessage() の eventDto の型を EventDto から実際の派生型 (たとえば、EventDtoSubclass2) に変更する方法はありますか?