【发布时间】:2011-11-01 03:15:16
【问题描述】:
我将 json 字符串反序列化为 List<ClassB>,现在我想在返回之前将其转换为 List<ClassA>
BindModel 方法。我需要强制转换,因为方法期望得到List<ClassA>。
为什么我在投射时出错?毕竟,ClassB 继承自 ClassA。我该怎么办?
附:这个问题是从this post 扩展而来的。在行 new DataContractJsonSerializer(typeof(List<ClassB>)); 而不是 List<ClassB> 中,类型将在运行时构造。
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; }
}
【问题讨论】:
-
您确定您使用的是 .NET 4.0 吗?你想要的叫做
covariance,应该已经支持了。 -
List
不支持协方差。