我想知道是否可以在某些定义的情况下使用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"]
}