さまざまな種類のイベントを含むリストの「ラッパー」クラスがあります。したがって、リスト自体は、具象型の代わりに一般的な「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
(enum の「EventA」です)。
しかし、JSON を EventLog インスタンスに逆シリアル化するのに問題があります (「型はインターフェイスまたは抽象クラスであり、インスタンス化できません」)。もちろん、デシリアライザーがリスト内の各イベントの必要なタイプを判別できないことは明らかです。しかし、EventType プロパティ (この場合は 0 または 1) による型の情報を持っているので、その情報を使用して全体を適切に逆シリアル化する方法を考えています。
ありがとうございました。