2010-04-11 36 views
2

以後有什麼我可能會後悔的,即任何主要限制,如果我們選擇XmlSerialization而不是DataContract?到現在爲止,我們已經接受了架構第一個合同設計。WCF中的任何XmlSerialization限制(與DataContract相對)?

例如,如果我們想要參數檢查,安全增強等等,現在用XmlSerialization進行鎖定會成爲問題,當我們嘗試添加其他WCF功能時?

回答

4

DataContractSerializer不支持某些模式元素,例如xs:choice元素。要知道,如果你最終使用了那些不受支持的元素,如果你願意,你將很難切換到數據合同。

除此之外,DataContractSerializer相對於XmlSerializerhere有相當不錯的分解。可能最重要的幾點是:

  • DataContractSerializer通常更高效;
  • DataContractSerializer可以序列化字段(XmlSerializer需要屬性);
  • XmlSerializer需要爲每一個序列化屬性公共吸氣二傳手(這是很煩人的,並可能導致一些次優的設計);
  • XmlSerializer需要一個公共無參數構造函數(DataContractSerializer實際上將忽略它);
  • XmlSerializer默認爲選擇退出,而DataContractSerializer爲選擇加入;
  • XmlSerializer更有可能與傳統客戶端(即ASMX Web服務和其他平臺)進行互操作;

一般來說,XmlSerializer讓你在XML更大的控制權,但DataContractSerializer讓你在代碼更多的控制。如果您想使用XML序列化程序,那麼您需要對其進行編碼,而您可以將Data Contracts與任何代碼進行集成。

+0

我更加關注的是,如果我們使用XmlSerialization,則序列化之外的WCF功能可能被阻止或阻止。當我們選擇XmlSerialization時,WCF的所有其他功能是否同樣適用? (是的 - 我們在我們的XSD中使用了「Choice」選項。通過XmlSerialization,我們只是在做SOAP而不是WCF?比如說,我們仍然可以用XmlSerialization來做SOAP-Faults嗎? – NealWalters 2010-04-12 00:11:12

+0

@NealWalters:他們添加了'支持.NET 3.5 SP1中的'Faults'屬性,所以是的,你仍然可以這樣做:http://blogs.msdn.com/rickrain/archive/2008/10/03/xmlserializer-faults.aspx。唯一的其他限制我知道的是,你不能使用'XmlIncludeAttribute',但用'KnownTypeAttribute'取代。除此之外,我認爲它們在功能支持方面是一樣的,但我不能聲稱我已經嘗試過任何東西和所有。 – Aaronaught 2010-04-12 00:54:01