我有一个包含不同类型事件的列表的“包装器”类。因此,列表本身使用通用的“AnEvent”接口而不是具体类型。
public class EventLog
{
[JsonProperty()]
private List<AnEvent> events;
// note that the list is private and has no getter/setter
}
界面如下所示:
//public enum EventTypes { EventA, EventB };
public interface AnEvent
{
EventTypes EventType
{
get;
set;
}
// some other properties...
}
最后但并非最不重要的一点是,具体的事件类型可能如下所示:
public class ConcreteEventA : AnEvent
{
private EventTypes eventType = EventTypes.EventA;
public EventTypes EventType
{
get { return eventType; }
set { eventType = value; }
}
// ...
}
public class ConcreteEventB : Event
{
// ....
}
可以看到,这里关于事件类型的信息有点多余(有类本身的类型,例如ConcreteEventA,类内部有一个叫做EventType(enum)的属性)。
EventLog 对象的序列化工作正常并返回事件的 JSON 列表。事件的类型表示如下:("EventType": 0
它是枚举的“EventA”)。
但是我无法将 JSON 反序列化回 EventLog 实例(“类型是接口或抽象类,无法实例化”)。当然,绝对清楚解串器无法确定列表中每个事件所需的类型。但是由于由于 EventType 属性(在本例中为 0 或 1),我拥有类型的信息,我想知道如何使用该信息正确反序列化整个事物。
谢谢你。