我有20個左右的事件類,都從EventDto繼承。這些子類都被序列化/反序列化(使用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
}
的問題是,在eventDto ProcessMessage的()具有EventDto的引用類型,所謂的進程()方法始終是相同的。我需要能夠區分EventDto的不同子類並調用適當的方法。
有沒有什麼辦法可以將EventMessage()中EventDto的類型從EventDto更改爲它的實際派生類型(比如EventDtoSubclass2)?
添加* *虛擬**處理方法,即 – Igor
爲真。我加了一點解釋。 – Tim
一切都很好,直到*替代*。 ** - 1 **(如果您能展示它的工作原理,我準備刪除-1) – I4V