Проблема десериализации WCF / RESTful DataContract - PullRequest
0 голосов
/ 16 февраля 2011

Я пытаюсь реализовать службу отдыха в WCF, но у меня возникают проблемы, связанные с тем, что служба не может десериализовать передаваемый ей xml. Он пытается сопоставить корневой элемент с контрактом на операции, а не с контрактом на данные. Например, со следующим пакетом XML,

<MyObject>
  <MyField1>asdf</MyField1>
  <MyField2>1234</MyField2>
  ...
</MyObject>

он не может десериализовать MyObject как входное сообщение, поскольку ожидает контракт операции на этом уровне.

Я не хочу просто использовать все поля в качестве параметров для контракта на эксплуатацию, поскольку 1) будет более 5 параметров, и 2) не остается места для данных расширения.

У меня настроено расширение для ведения журнала входящего запроса. Должен ли я просто обернуть входящее сообщение корневым элементом, чтобы правильно десериализовать его? Или есть менее хакерский способ заставить эту работу - не заставлять клиента менять реализацию?

Спасибо

1 Ответ

1 голос
/ 17 февраля 2011

Мое решение состояло в том, чтобы изменить мой операционный контракт на

[OperationContract(Action="*")]
void ProcessMessage(Message message);

и десериализовать сообщение, используя

var msg = message.GetBody<MyObject>();

с моим существующим DataContract.

Обновление: Я фактически решил использовать XmlSerializer для десериализации, поскольку он позволяет вызывающей службе изменять порядок полей в BLOB-объекте xml.

...