I deserialized cadena json a List<ClassB>
y ahora quiero convertirlo a List<ClassA>
antes de devolverlo desde BindModel
método. Necesito el casting porque los métodos esperan obtener List<ClassA>
.Cómo agregar la lista <ClassB> a la lista <ClassA> cuando ClassB hereda de ClassA?
¿Por qué obtengo un error durante la conversión? Después de todo, ClassB
hereda de ClassA
. ¿Que debería hacer?
P.S. esta pregunta se extiende desde this post. En la línea new DataContractJsonSerializer(typeof(List<ClassB>));
en lugar de List<ClassB>
, el tipo se construirá en tiempo de ejecución.
public override object BindModel(...)
{
var serializer = new DataContractJsonSerializer(typeof(List<ClassB>));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("[{\"id\":\"1\",\"name\":\"name\"}]"));
var list = serializer.ReadObject(ms);
return (List<ClassA>)list;
}
[KnownType(typeof(ClassA))]
[DataContract]
public class ClassA
{
public ClassA();
}
[KnownType(typeof(ClassB))]
[DataContract]
public class ClassB : ClassA
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "name")]
public string CategoryName { get; set; }
}
¿Estás seguro de que estás utilizando .NET 4.0? Lo que quiere se llama 'covarianza' y ya debe ser compatible. – nothrow
La lista no es compatible con la covarianza. –
Aliostad