4

我正在編寫一個程序,它構建了一個樹類結構,它由類繼承自一個抽象類Node。我的程序中內置了許多不同類型的節點。不過,我也想讓更高級的用戶能夠引用我的庫並編寫他們自己的派生Node。這些插件庫隨後在我的應用程序啓動時通過Assembly.Load()加載。因此,我的應用程序使用的所有可能的Node類型在運行時纔會知道。什麼XML序列化方法應該用於公共API?

此外,我希望能夠序列化和反序列化這些樹到XML文件和從XML文件反序列化。我有一些使用XMLSerializer,DataContractSerializer和實現IXmlSerializable的經驗。通常,我使用DataContractSerializer,因爲它通常需要更少的代碼,然後實現IXmlSerializable,並且可以序列化XmlSerializer無法使用的專用字段。

然而,在這個項目中,我還必須考慮其他用戶將創建從我的類派生的類,並且還必須添加序列化它們所需的任何代碼或屬性。

考慮到這個原因,我應該使用一個序列化機制而不是另一個?

回答

2

如果序列化和反序列化只會發生在您的應用程序中,並且沒有其他人能夠讀取序列化數據的要求,那麼序列化格式不會影響API:就用戶而言在API方面,你會序列化成一個不透明的文件,並從相同的反序列化。

在這種情況下,使用DataContractSerializer,因爲它可以在需要時序列化爲二進制。

+0

是的我沒有看到任何程序,除了我的程序需要序列化/反序列化這些文件,我也喜歡在未來允許其他序列化格式(如二進制)的想法。 – 2010-11-19 20:08:56

+0

要明確,我的意思是「二進制」是XmlDictionaryWriter類可以發出的二進制序列化XML。我們都習慣於文本序列化的XML,但這只是一種序列化格式。 – 2010-11-19 20:10:15

+0

* @ John Saunders *定義XML僅僅是一種序列化格式太過簡化...... – Luca 2010-11-19 20:56:58

相關問題