Как десериализовать подтип 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"]
}

0 ответов

Другие вопросы по тегам