Re запрос / ответ - [DataContract]
будет работать так же хорошо. Одним из преимуществ контрактов сообщений является то, что вы можете установить конфиденциальность в отношении участников, но во многих случаях это не является необходимым. В таких случаях я предпочитаю сохранять договор как можно более простым, как договор с данными.
От того, какой сериализатор - это во многом фактор конфигурации. Например, по умолчанию через http это будет DataContractSerializer
.
Однако я не уверен, что список IMyComplexType
будет работать очень хорошо. Вы можете попробовать, но, как правило, он хочет конкретных типов. Обратите внимание, что с базовыми классами вы можете использовать [KnownType]
для указания разрешенных подтипов.
Обратите внимание, что в отличие от XmlSerializer
, для членов коллекции не обязательно иметь сеттеры - хотя вам может понадобиться добавить метод обратного вызова OnDeserializing
для инициализации списка, если вы это сделаете (WCF не вызывает конструкторы) .
В сторону: вы также можете использовать protobuf-net с контрактами данных и WCF (при условии, что у них есть явный Заказ); это более плотно упаковано, чем обычный XML. В настоящее время он не поддерживает контракты на сообщения.