Как вернуть IList в формате json в сервисе WCF RESTful?

Возможно ли иметь такую ​​сигнатуру метода в службе WCF 3.5 (Offer - это настраиваемый класс с 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, поэтому поведение кажется нормальным. Вопрос все еще остается, можно ли сохранить эту подпись и изменить поведение сериализатора, чтобы это работало? Как?


person Maxime Rossini    schedule 07.02.2011    source источник


Ответы (1)


Я считаю, что вам нужно добавить жесткие типы коллекций, которые вы используете, в список известных типов. См. 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.

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

person krisragh MSFT    schedule 08.02.2011