2009-04-10 40 views
6

好吧,讓我的DataContractSerializer與我的對象圖一起工作。查看我之前的問題以獲取更多信息。RuntimeType:http://schemas.datacontract.org/2004/07/System'不是預期的

Serialization/Derialization of a tree structure

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

然而,我的領域之一,_UserPropertyDefinitions,被定義爲如下所示。它定義自定義屬性的列表,該用戶可以在數據結構添加到對象。該字符串是標識屬性的唯一鍵,而Type是屬性的類型,它總是像Bool,Int,String等的主要類型。

每個對象都有對應的Dictionary(String key,對象的值)集合來存儲它已經爲任何「用戶屬性」的

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

我的對象圖連載罰款時,這個屬性是一個空集,但該值一次我的自定義屬性添加到該集合嘗試使用DataContractSerializer序列化時,出現以下異常。預計不會 :

類型 'System.RuntimeType' 與數據 合同名稱 'http://schemas.datacontract.org/2004/07/System RuntimeType'。添加靜態已知的已知 類型的列表中沒有任何類型 - 例如,通過使用 KnownTypeAttribute屬性或者 將其添加到傳遞給DataContractSerializer的已知類型 列表。

如果我刪除這個字段的DataMember屬性,我可以序列化/反序列化出來得到一個異常,但我當然放鬆了我在這個領域創建的設置。

+1

對不起,延遲響應; -p Type.GetType()或Assembly.GetType() – 2009-04-13 08:12:56

回答

7

我很肯定Type不會很好地序列化 - 無論如何它不屬於數據契約,因爲(特定於實現)它違背了數據的一個主要目標-contract ...

但是,我希望最好的辦法是將其換成Dictionary<string,string>,使用TypeAssemblyQualifiedNameFullName

+0

Geeze Marc你沒有任何真正的工作要做? :-)但是,我真的非常感謝你的幫助。所以基本上我會存儲類型的名稱,然後從名稱中檢索真正的類型? 我知道如何找到類型的名字,但是如果我只知道這個名字,我該如何檢索一個類型? – 2009-04-10 22:31:50