我有 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)?
最佳答案
最简单的方法是使用 is
运算符。
public void Process(EventDto eventDto)
{
//Do nothing
if (eventDto is EventDtoSubclass1)
{
// do something
}
else if (eventDto is EventDtoSubclass2)
{
// do something else
}
}
关于c# - 如何将父类引用的子类更改为具有子类的引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733204/