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

好吧,我让DataContractSerializer使用我的对象图。 有关更多信息,请参阅我之前的问题

树结构的序列化/ Derialization

反序列化器没有任何类型的知识可以映射到此合同

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

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

[DataMember] private Dictionary _UserPropertyDefinitions; 

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

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

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

我很确定Type不会很好地序列化 – 并且可以说它不属于数据契约,因为(具体实现)它违背了数据契约的主要目标之一。 。

但是,我希望最好的方法是使用TypeAssemblyQualifiedNameFullName将其替换为Dictionary