如何将json子类型反序列化为默认类型

时间:2019-03-02 09:06:19

标签: json .net-core deserialization jsonnet

我想知道是否可以在某些定义的情况下使用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 个答案:

没有答案