Как десериализовать подтип json в тип по умолчанию
Я хочу знать, можно ли десериализовать объект, используя JsonSubTypes
для некоторых определенных случаев и всех остальных для десериализации по умолчанию:
public class Parent
{
public Message Data{get;set;}
}
[JsonSubTypes.KnownSubTypes(typeof(Message1),Kind.M1]
[JsonSubTypes.KnownSubTypes(typeof(Message2),Kind.M2]
public class Message
{
public enum Kind{
M1=0,
M2=1
}
public abstract Kind MessageKind{get;}
}
public Message1:Message{
override Kind MessageKind=>Kind.M1;
}
public Message2:Message{
override Kind MessageKind=>Kind.M2;
}
Для любого данного json
как показано ниже, я хочу проверить, если MessageKind
находится в JsonSubType
список и если не десериализовать Data
поле как объект:
{
Data:{ MessageKind:0 } -> class Parent { public Message Data {get;set;}
}
Для Kind
не в JsonSubType
список, который я хотел бы десериализовать, как это
{
Data:{ MessageKind:101} -> class Parent { public object Data {get;set;} //kind is not 0 nor 1
}
PS Класс Parent
поля идентичны, кроме Data
Поле. Так что я не знаю эффективного способа десериализации.
public class Parent
{
[fields]....[...]
public [object / Message ] Data {get;set;} //depending on Data["MessageKind"]
}