【发布时间】:2009-08-25 03:22:23
【问题描述】:
【问题讨论】:
-
我讨厌问这个,但是 XmlSerializer 有什么问题?
-
@sztomi:无法使用 IEnumerable
真的让我很烦恼。
【问题讨论】:
例如默认情况下被 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] 属性,以及用于序列化的版本。
【讨论】: