0

我有以下结构:

class Base
{
}

class Child : Base
{
}

当我尝试执行以下操作时:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Base));
serializer.WriteObject(stream, data);

它失败并显示错误消息:

不应使用数据合同名称“Child: http://schemas.datacontract.org/2004/07/MyNamespace ”键入“MyNamespace.Child”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

有谁知道如何正确序列化子类?

4

1 回答 1

3

如果将KnownType 属性(来自 System.Runtime.Serialization)添加到子类的基类,那么它将起作用:

[KnownType(typeof(Child))]
class Base
{}

class Child : Base
{}

这是必需的,因为当您将序列化程序设置为序列化基类时,它不会加载您的子类型(至少这是我的理解)。

于 2008-11-18T02:00:07.987 回答