我有一個插件的應用程序,它是動態加載的。我將這些程序集中的類型保存在Type對象的數組中。然後,當應用程序關閉時,它會通過序列化將此數組保存到文件中。當應用程序啓動它加載此文件並嘗試反序列化它發生錯誤,因爲包含在這些類型中描述的類的程序集不可用。我無法理解爲什麼會發生:類型'類型'是在mscorlib或類似的東西。對象類型是否引用它描述的類型?爲什麼反序列化'Type'類型的對象需要一個描述類型本身?
回答
考慮類型Type
的Assembly
屬性。這將返回包含該類型的程序集的引用。爲了獲得該參考,組裝必須被加載(可能「僅用於反射」)。同樣,你可以問一個類型的所有方法等 - 如果沒有組件存在,你會如何工作?
我想一個Type
可以在所有的屬性值僅作爲填充和正在需要時,他們這樣一種方式進行序列化,所以你可以有其中提到一種在缺少Type
對象大會......但它會很奇怪。
也許你應該只是保持完全合格的類型名稱而不是Type
本身,如果這就是你想要能夠依靠的所有?
嗯。在這種情況下,我可以問另一個問題:'Type'類型的屬性AssemblyQualifiedName總是唯一的嗎?可能它與其他程序集或同一程序集的類型混淆,但是新版本? – Vasya
@ Praetor12:那麼AssemblyQualifiedName *包含*程序集名稱,因此「程序集合」。同樣它包含了命名空間。現在,你可能有兩個具有相同名稱的程序集(如果它們不是強類型的),儘管我不確定如何將它們加載到相同的AppDomain中。在絕大多數情況下,AssemblyQualifiedName應該足夠了。 –
我只需要確定類型不會與對方混淆。而且,可能會有幾種類型的組件只有它們的版本不同。 – Vasya
- 1. 序列化類型爲Type的非序列化對象?
- 2. 反射類型和類型描述符
- 3. 類型反序列化對象
- 4. 爲什麼在實例化對象時需要列出兩種對象類型?
- 5. 這是什麼類型的對象? XML序列化/反序列化
- 6. 對象類型的文字描述
- 7. Newtonsoft JSON.NET反序列化到一個類型的對象
- 8. 爲什麼CLR對象類型是可序列化的?
- 9. 類型描述中的通用對象類型
- 10. 反序列化一個通用類型
- 11. 將具體類型的對象反序列化爲接口類型
- 12. 反序列化json數組爲vb .NET對象異常 - 無法序列化爲因爲類型需要數組
- 13. 反序列化一個類型爲委託的字段的類
- 14. 序列化一個類對象,並將它反序列化爲另一個類
- 15. 序列化同一對象類型
- 16. 爲什麼序列化模型類
- 17. 如何將C#中的Type類對象序列化並反序列化爲YAML?
- 18. 無法反序列化JSON對象類型需要JSON數組(例如[1,2,3])才能正確反序列化
- 19. 無法將JSON對象反序列化爲類型'Raven.Json.Linq.RavenJObject'
- 20. Json.NET:將嵌套數組反序列化爲強類型對象
- 21. 無法將當前JSON對象反序列化爲類型'System.Collections.Generic.List
- 22. C#需要什麼類型?
- 23. 爲什麼序列化對象需要序列化
- 24. 序列化爲XML幷包含序列化對象的類型
- 25. 將一個匿名類型反序列化爲一個動態
- 26. 什麼類型給一個JSON對象
- 27. JSON Newtonsoft C#反序列化不同類型的對象列表
- 28. 序列化一個C#對象爲特定類型
- 29. 如何使用Type對象將對象類型的對象轉換爲Type對象引用的類型
- 30. 爲什麼XmlSerializer需要聲明爲public的序列化對象的類?
反序列化創建一個新對象。這需要調用對象構造函數。它存儲在那些程序集中的一箇中。 –