2010-04-11 2 views
2

Есть ли что-нибудь, что я могу пожалеть позже, то есть какие-либо серьезные ограничения, если мы выберем XmlSerialization вместо DataContract? До сих пор мы рассмотрели первый контрактный проект схемы.Любые ограничения XmlSerialization в WCF (в отличие от DataContract)?

Например, если мы хотим проверить параметры, улучшения безопасности и т. Д. ... теперь будет заблокирована с XmlSerialization, если мы попытаемся добавить другие функции WCF?

ответ

4

Некоторые элементы схемы не поддерживаются DataContractSerializer, например, элементом xs:choice. Знайте, что если вы в конечном итоге используете любой из этих неподдерживаемых элементов, вам будет очень сложно переключиться на Data Contracts, если вы когда-либо захотите.

Кроме того, существует неплохой пробой DataContractSerializer против XmlSerializerhere. Вероятно, наиболее важными моментами являются:

  • DataContractSerializer обычно более эффективен;
  • DataContractSerializer может сериализовать поля (XmlSerializer нуждается в свойствах);
  • XmlSerializer требует общественных геттер и сеттеров для каждой сериализованной собственности (это очень раздражает и может привести к некоторым неоптимальным конструкциям);
  • XmlSerializer требует публичного конструктора без параметров (DataContractSerializer фактически проигнорирует его);
  • XmlSerializer отказывается по умолчанию, тогда как DataContractSerializer - это отказ;
  • XmlSerializer, скорее всего, сможет взаимодействовать с унаследованными клиентами (то есть веб-сервисами ASMX и другими платформами);

Вообще говоря, XmlSerializer дает намного больший контроль над XML, но DataContractSerializer дает намного больший контроль над кодом. Если вы хотите использовать XML-сериализатор, вам нужно кодировать свои прихоти, тогда как вы можете интегрировать Data Contracts практически с любым кодом.

+0

Я больше интересовался тем, какие функции WCF вне сериализации могут быть заблокированы или предотвращены, если мы пошли с XmlSerialization. Все ли другие функции WCF одинаково применимы, когда мы выбираем XmlSerialization? (И да - мы используем опцию «Выбор» в наших XSD. По XmlSerialization мы просто делаем SOAP, а не WCF на самом деле? Как, например, можем ли мы по-прежнему делать SOAP-Faults с XmlSerialization? – NealWalters

+0

@NealWalters: они добавили 'SupportsFaults' в .NET 3.5 SP1, так что да, вы все равно можете это сделать: http://blogs.msdn.com/rickrain/archive/2008/10/03/xmlserializer-faults.aspx. Единственное другое ограничение I знаете, что вы не можете использовать 'XmlIncludeAttribute', но это заменено на' KnownTypeAttribute'. Кроме того, я думаю, что они одинаковы с точки зрения поддержки функций, но я не могу утверждать, что я пробовал что-либо и все. – Aaronaught