Tengo una matriz JSON que contiene objetos de diferentes tipos con diferentes propiedades. Una de las propiedades se llama "tipo" y determina el tipo de elemento de la matriz. Este es un ejemplo de mis datos:Deserialización de matriz JSON heterogénea en la lista covariante <> con JSON.NET
[{
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"
}
}
]
]
]
Para asignar los objetos a mi aplicación .Net que definen un conjunto de clases: una clase base y varias clases hijas (con una jerarquía compleja, que tiene 4 "generaciones") . Aquí es sólo un pequeño ejemplo de estas clases:
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; }
}
Lo que quiero llegar es ser capaz de deserializar esta matriz en una lista genérica covariante, declarado como:
List<TExpression> myexpressions = JsonConvert.DeserializeObject<List<TExpression>>(aststring);
Esta lista debe contener las instancias de clases apropiados para niños que heredan de TExpression, por lo que puede utilizar el siguiente código más adelante en mi código:
foreach(TExpression t in myexpressions)
{
if (t is TComment) dosomething;
if (t is TTokenSequence) dosomethingelse;
}
¿Cómo puedo llegar a ella usando JSON.NET?
duplicado Posible de https://stackoverflow.com/questions/35182949/deserialize-json-string-depending- on-type/44650012 – manuc66