【发布时间】:2013-07-18 20:24:53
【问题描述】:
我有 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
}
问题是ProcessMessage()中的eventDto有一个EventDto的引用类型,所以调用的Process()方法总是一样的。我需要能够区分 EventDto 的不同子类并调用相应的方法。
有没有办法将 ProcessMessage() 中的 eventDto 类型从 EventDto 更改为其实际派生类型(例如 EventDtoSubclass2)?
【问题讨论】:
标签: c# inheritance casting reference-type derived-types