有沒有人遇到過問題,將組件序列化成文件並讀回來,特別是在組件供應商升級VCL組件的區域。例如一個用DelphiX序列化的文件,然後幾年後用delphiY回讀。序列化格式是否改變,如果有的話,可以做些什麼來防止升級時組件中的錯誤讀取。Delphi組件序列化
回答
用於序列化已發佈屬性的內置RTTI系統易受組件更改影響。只要舊物業保存在新物品中,前行就可以管理。即你可以按照原樣離開財產界面,但如果你願意的話,可以拋棄內容。向後退卻更糟糕 - 由於新版本保存的屬性無法在舊版本加載中打開,這將是一個問題。
有些組件/庫(http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes)可以添加XML格式的序列化,這可能會有所幫助,因爲您可以選擇跳過您不知道的內容。
您仍需要注意您是如何設計發佈的內容,並且應該找到一種方法來「忽略但傳播」您當前版本無法理解的內容。這將允許您在嘗試保留較新的屬性時打開並更改較新格式的文件,而不是將其剝離。
由於供應商會向其組件添加功能,因此格式將明確更改。序列化只是遍歷所有已發佈的屬性並將它們保存到流中。當它們被讀回時,從流中讀取的每個屬性都將被設置回組件。如果該物業不存在了,你有問題。除了一些基本的異常處理外,我不認爲你可以做任何事情。
保證兼容性的最佳方法是自己做系列化。
感謝您的回覆。我試圖避免自定義序列化,並利用每個組件的序列化技術,但缺乏opf的任何方式來「升級」到一個新的組件格式我想自定義序列化是唯一的方法。
只要您仍然閱讀支持舊的和過時的參數,就可以使新版本能夠讀取舊的流。問題在於讓舊發行版讀取新的流,而這些新流是沒有定製序列化的情況下無法完成的。 – 2008-09-17 06:46:45
- 1. Delphi 7 remobjects - 序列化組件
- 2. Java swing組件序列化
- 3. 組件未被序列化
- 4. Swing組件和序列化
- 5. 序列化WPF組件
- 6. 序列化JavaFX組件
- 7. Delphi DeHL反序列化新文件夾中的XML文件?
- 8. 帶有Canvas的Delphi可視化組件
- 9. 序列化/反序列化PHP數組
- 10. Node.js:如何序列化/反序列化React組件?
- 11. 序列化和反序列化數組文件 - 節點JS
- 12. VCL組件Delphi
- 13. 序列化數組
- 14. 序列化/反序列化int數組以字符數組
- 15. delphi組件順序和圖層選項
- 16. 序列化鞦韆/ AWT組件
- 17. 的程序化用Delphi
- 18. Delphi組件像trichview
- 19. javascript數組序列化
- 20. 序列化組合對象
- 21. 序列化javascript數組
- 22. 序列化包含數組
- 23. 多維數組序列化
- 24. 反序列化數組
- 25. JSON數組未序列化
- 26. 如何序列化數組?
- 27. 序列化元組到JSON
- 28. 序列化對象數組
- 29. 如何序列化數組?
- 30. ORM與序列化數組?
當您直接使用Classes.TReader併爲OnError事件編寫處理程序時,使用VCL-Streaming可以處理缺少的屬性(以及缺失的類和其他錯誤)。你找到了Classes單元中需要的所有代碼。 最大的缺點是您的類/類必須從TComponent派生或至少從TPersistent派生。 – 2010-03-16 09:48:46