Ответ 1
Возможно, но это довольно сложно сделать. Класс DataContractSerializerOperationBehavior (где вы обычно заменяете сериализатор путем переопределения метода CreateSerializer) является внутренним в SL, поэтому вы не можете его использовать. Что вам нужно сделать, так это создать IOperationBehavior, который сделал то, что делает DCSOB, а именно, установить IClientMessageFormatter, который клиент будет использовать для преобразования между телом Message (XML Infoset) и параметрами/возвращаемыми значениями. Это означало бы написание кода для переноса/разворачивания параметров из операции в/из объекта Message. Не совсем невозможно, но он должен работать.
Что касается WP7, то он не имеет точек расширяемости, необходимых для этого решения (IOperationBehavior, IClientMessageFormatter) не существует (они были добавлены на SL4, а WP7 примерно совместим с SL3), поэтому я не подумайте, что это возможно - или, по крайней мере, не в общем виде (вы можете объявить все свои операции с объектами Message - Message MyOperation (Message input) - и на этом этапе вы можете напрямую обращаться к сообщению Infoset (GetReaderAtBodyContents), но это необходимо выполнить в каждом операционном вызове.
Обновлено: ну, я пробовал, и это можно сделать и в Windows Phone 7 (и Silverlight 3), это намного сложнее. Я воссоздал точки расширяемости, используя пару настраиваемых каналов. Описание того, как это можно сделать, можно найти на http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/21/wcf-extensibility-extensibility-in-windows-phone-and-silverlight-3.aspx.