2009-08-24 68 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