RuntimeType:http://schemas.datacontract.org/2004/07/System'不是预期的

时间:2009-04-10 22:22:31

标签: c# datacontractserializer

好的,所以我让DataContractSerializer使用我的对象图。有关详细信息,请参阅我之前的问题。

Serialization / Derialization of a tree structure

The deserializer has no knowlege of any type that maps to this contract

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

每个对象都有一个对应的字典(字符串键,对象值)集合,用于存储为任何“用户属性”设置的值

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

当此属性为空集合时,我的对象图序列化很好,但是当我向此集合添加自定义属性时,在尝试使用DataContractSerializer进行序列化时会出现以下异常。

  

输入带有数据的'System.RuntimeType'   合同名称   'RuntimeType:http://schemas.datacontract.org/2004/07/System'   不是预期的。不添加任何类型   静态地知道已知的名单   类型 - 例如,通过使用   KnownTypeAttribute属性或   将它们添加到已知类型列表中   传递给DataContractSerializer。

如果我删除此字段的DataMember属性,我可以序列化/反序列化而不会获得异常,但当然我放弃了我在此字段中创建的设置。

1 个答案:

答案 0 :(得分:7)

我很确定Type不会很好地序列化 - 并且可以说它不属于数据合同,因为(具体实现)它违背了一个主要目标数据合同...

但是,我希望最好的方法是使用Dictionary<string,string>的{​​{1}}或Type来换AssemblyQualifiedName