2010-03-16 65 views
0

什麼是序列化自定義類的更好方法:在類上使用XMLSerializer或BinarryFormatter和[Serializable]屬性?關於序列化的問題

回答

2

如果不知道如何使用生成的文件以及它的生命週期,就無法回答這個問題。

這個決定是基於這樣一個事實:「升級」二進制格式比較困難。如果你的對象模型改變了,它將不會正確地反序列化。但是如果你已經實現了一個自定義的XML序列化/反序列化,那麼你可以適當地處理這些「新」情況,並且生活會很好。

因此,請更多地瞭解您將如何使用它,您與誰共享信息以及模型可能發生的變化。

FWIW,我有時在給定的項目中使用這兩種類型的序列化。

+0

所以我用一個XmlSerializer的,並試圖序列包含字典的類上暴露給任何客戶端無論平臺/環境,但它提出一個錯誤:「無法序列化一個成員,因爲它實現了IDictionary」。 你可以請情況幫忙嗎? – Mike 2010-03-16 11:00:33

+0

@Mike:你可以幫助自己。該錯誤消息表示它無法序列化該接口。所以你需要自己實現它(通過覆蓋相應的函數)。 – 2010-03-16 11:39:02

+0

非常感謝您的建議 – Mike 2010-03-16 12:20:39

1

這真的取決於你如何使用序列化的類。如果您想將其傳遞給其他程序或想要輕鬆調試它,請使用XML(但請注意,XMLSerializer可能會生成不符合規範的XML輸出,如多個根元素)。

在其他所有情況下,您可以使用二進制格式化程序。但是請注意,如果稍後更改類,則XML更適合 - 您可以使用XMLIgnore等來保持XML格式不變。

0

有時也會根據序列化輸出的用途爲您做出決定 - 雖然您可以公開一個WebService以獲取二進制數組,這是一個二進制序列化項,但您無法使用Web服務很容易從除.Net之外的任何東西(並且最終客戶端可能需要對該類型的引用)。

使用XML意味着服務可以在最終客戶