I have a JSON-array containing objects of different types with different properties. One of the properties is called "type" and determines the type of the array item. Here is an example of my data:
[{
type : "comment",
text : "xxxx"
}, {
type : "code",
tokens : [{
type : "ref",
data : "m"
}, {
type : "operator",
data : "e"
}
]
}, {
type : "for",
boundLocal : {
type : "local",
name : "i",
kind : "Number"
},
upperBound : {
type : "ref",
tokens : [{
type : "operator",
data : "3"
}, {
type : "operator",
data : "0"
}
]
},
body : [{
type : "code",
tokens : [{
type : "ref",
data : "x"
}
]
}, {
type : "code",
tokens : [{
type : "ref",
data : "y"
}
}
]
]
]
To map those objects to my .Net implementation I define a set of classes: one base class and several child classes (with a complex hierarchy, having 4 "generations"). Here is just a small example of these classes:
public abstract class TExpression
{
[JsonProperty("type")]
public string Type { get; set; }
}
public class TComment : TExpression
{
[JsonProperty("text")]
public string Text { get; set; }
}
public class TTokenSequence : TExpression
{
[JsonProperty("tokens")]
public List<TToken> Tokens { get; set; }
}
What I want to reach is to be able to deserialize this array into a covariant generic list, declared as:
List<TExpression> myexpressions = JsonConvert.DeserializeObject<List<TExpression>>(aststring);
This list should contain the instances of appropriate child classes inheriting from TExpression, so I can use the following code later in my code:
foreach(TExpression t in myexpressions)
{
if (t is TComment) dosomething;
if (t is TTokenSequence) dosomethingelse;
}
How can I reach it using JSON.NET?
question from:
https://stackoverflow.com/questions/8241392/deserializing-heterogenous-json-array-into-covariant-list-using-json-net 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…