2009-08-24 67 views

回答

7

DataContractSerializer

它使用WCF默認爲例子。請參閱here進行比較。

個人而言,我討厭XmlSerializer不能做內部類型。 DataContractSerializer沒有這個問題。另外,例如,對於泛型,DataContractSerializer更容易。如果您想製作人性化的可編輯XML格式,可能不太理想。

由於Maxim指出,DataContractSerializer行爲有點不同於你所期望的:它不會調用任何構造函數來反序列化你的對象。如果您出於某種原因需要進行初始化,則可以使用[OnDeserializing]屬性。我用一個模式是這樣的:

[DataContract] 
public MyClass 
{ 
    public MyClass() 
    { 
     Initialize(); 
    } 

    [OnDeserializing] 
    private OnDeserializing(StreamingContext context) 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     // Do stuff 
    } 
} 

同樣,還有一個[OnDeserialized]屬性,並進行序列化的版本。

+1

請注意,不用DataContractSerializer調用構造函數 – 2009-08-24 19:12:09

+0

好點。它在我意識到這一點之前就困惑了我的地獄:) – Thorarin 2009-08-24 19:23:31