我有以下结构:
class Base
{
}
class Child : Base
{
}
当我尝试执行以下操作时:
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Base));
serializer.WriteObject(stream, data);
失败并显示错误消息:
类型 'MyNamespace.Child' 与数据合同名称 '儿童:http://schemas.datacontract.org/2004/07/MyNamespace' 不是预期的。不添加任何类型 静态地知道已知的名单 类型 - 例如,通过使用 KnownTypeAttribute属性或 将它们添加到已知类型列表中 传递给DataContractSerializer。
有谁知道如何正确序列化子类?
答案 0 :(得分:3)
如果将KnownType attribute(来自System.Runtime.Serialization)添加到子类的基类,那么它将起作用:
[KnownType(typeof(Child))]
class Base
{}
class Child : Base
{}
这是必需的,因为序列化程序在您将其设置为序列化基类时不会加载您的子类型(至少这是我的理解)。