7

好的,所以我让 DataContractSerializer 与我的对象图一起工作。有关更多信息,请参阅我以前的问题。

树结构的序列化/反序列化

反序列化器不知道映射到该合约的任何类型

但是,我的一个字段_UserPropertyDefinitions的定义如下所示。它定义了该用户可以添加到数据结构中的对象的自定义属性列表。字符串是标识属性的唯一键,Type 是属性的类型,它始终是原始类型,如 Bool、Int、String 等。

每个对象都有一个对应的Dictionary(String key, Object value)集合来存储它为任何“用户属性”设置的值

[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;

当这个属性是一个空集合时,我的对象图可以很好地序列化,但是一旦我向这个集合添加了一个自定义属性,我在尝试使用 DataContractSerializer 序列化时得到以下异常。

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

如果我删除该字段的 DataMember 属性,我可以序列化/反序列化而不会出现异常,但我当然会丢失我在该字段中创建的设置。

4

1 回答 1

7

我很确定它Type不会很好地序列化 - 并且可以说它无论如何都不属于数据合同,因为(特定于实现)它违背了数据合同的主要目标之一......

但是,我希望最好的方法是Dictionary<string,string>使用Type'sAssemblyQualifiedNameFullName.

于 2009-04-10T22:25:43.797 回答