Я хочу знать, можно ли десериализовать объект, используя 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"]
}