У вас есть два варианта:
Создание DTO с атрибутом DataContract и «перевод» из объектов контракта, не связанных с данными, в DTO и обратно при вызове службы. Это позволит использовать сериализатор Data Contract и ваш сервис в обычном режиме. Это может быть утомительно, если вы используете много полей из этих объектов (я постараюсь ограничить используемые поля, если это возможно, ТОЛЬКО теми, которые, как вы знаете, вам понадобятся)
Использовать XML-сериализатор для вызовов, которые их отправляют / возвращают. Сериализатор XML немного медленнее, чем сериализатор Data Contract, но обеспечивает больший контроль над тем, как сериализуются данные. Ваши клиенты не увидят (или не заботятся) о разнице. В Интернете есть много примеров того, как это сделать (например: http://msdn.microsoft.com/en-us/library/ms733901.aspx),, поэтому я не буду их здесь повторять. :) Это не так уж сложно.
Удачи