Как вернуть IList в формате json в службу WCF RESTful? - PullRequest
1 голос
/ 07 февраля 2011

Возможно ли иметь подпись метода, подобную этой, в службе WCF 3.5 (Предложение - это пользовательский класс с DataContractAttribute и DataMemberAttribute):

[OperationContract]
[WebGet(UriTemplate = "GetOffers", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
IList<Offer> GetOffers();

Потому что, если я наберу в веб-браузере соответствующий URL-адрес, Я получаю ошибку сериализации (я думаю, это потому, что IList не имеет атрибута Serializable, поэтому сериализатор json не может его сериализовать).

Обходным путем будет использование сигнатуры метода, подобной этой:

[OperationContract]
[WebGet(UriTemplate = "GetOffers", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
List<Offer> GetOffers();

Приводя к тому же сериализованному выводу (простой массив json), но так как первый работает с XML, мне было интересно, есть ли способ заставить его работать в json, сохраняя ту же сигнатуру.

Редактировать: Хорошо, он также не работает с сериализацией XML, поэтому поведение кажется нормальным.Вопрос все еще стоит, возможно ли сохранить эту подпись и изменить поведение сериализатора, чтобы это работало?Как?

1 Ответ

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

Полагаю, вам нужно добавить используемые типы жестких коллекций в список известных типов.См. http://msdn.microsoft.com/en-us/library/ms730167.aspx для концептуального объяснения, см. http://msdn.microsoft.com/en-us/library/ms751512.aspx для примера и см. http://msdn.microsoft.com/en-us/magazine/gg598929.aspx для очень хорошо написанной статьи MSDN Magazine.

Также, пожалуйста, посмотрите два верхних ответа здесь: Как вы настраиваете известные типы WCF программно?

...