Как десериализовать подтип json в тип по умолчанию - PullRequest
0 голосов
/ 02 марта 2019

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