2

以后有什么我可能会后悔的吗,即如果我们选择 XmlSerialization 而不是 DataContract 有什么重大限制?到目前为止,我们已经接受了模式优先合约设计。

例如,如果我们想要进行参数检查、安全增强等……当我们尝试添加其他 WCF 功能时,现在使用 XmlSerialization 锁定会成为问题吗?

4

1 回答 1

4

不支持某些模式元素DataContractSerializer,例如xs:choice元素。要知道,如果您最终使用了任何这些不受支持的元素,那么如果您愿意的话,您将很难切换到数据协定。

除此之外,这里DataContractSerializer的vs.有一个很好的细分。可能最重要的几点是:XmlSerializer

  • DataContractSerializer通常效率更高;
  • DataContractSerializer可以序列化字段(XmlSerializer需要属性);
  • XmlSerializer每个序列化属性都需要一个公共的gettersetter(这很烦人,可能会导致一些次优设计);
  • XmlSerializer需要一个公共的无参数构造函数(DataContractSerializer实际上会忽略它);
  • XmlSerializer默认情况下选择退出,而DataContractSerializer选择加入;
  • XmlSerializer更有可能与遗留客户端(即 ASMX Web 服务和其他平台)进行互操作;

一般来说, 可以XmlSerializer让您对 XML 有更多的控制,但可以让您对代码DataContractSerializer有更多的控制。如果您想使用 XML 序列化程序,您必须随心所欲地编写代码,而您可以将 Data Contracts 与几乎任何代码集成。

于 2010-04-11T23:50:27.123 回答