RESTful WCF-упаковка json-ответа с именем метода - PullRequest
10 голосов
/ 16 февраля 2012

Я довольно новичок в сервисах RESTful WCF, так что терпите меня. Я пытаюсь создать простой сервис RESTful WCF, который возвращает список студентов в виде ответа json. Все работает хорошо до того момента, когда я пытаюсь преобразовать строку json обратно в список объектов Student на клиенте.

Вот мой рабочий контракт:

[OperationContract]
[WebGet(UriTemplate = "Students/", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
public List<Student> FetchStudents()
{
//Fetch and return students list
}

Код клиента:

static void Main(string[] args)
{
HttpClient client = new HttpClient("http://localhost/StudentManagementService/StudentManagement.svc/");
response = client.Get("Students/");
response.EnsureStatusIsSuccessful();
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
string str = response.Content.ReadAsString();
List<Student> st = json_serializer.Deserialize<List<Student>>(str);
}

Этот код явно не работает, потому что возвращаемая службой строка json выглядит следующим образом:

{"FetchStudentsResult":[{"Course":"BE","Department":"IS","EmailID":"b@gmail.com","ID":1,"Name":"Vinod"}]}

По какой-то причине ответ json оборачивается внутри FetchStudentsResult. Теперь в режиме отладки, если я принудительно удаляю эту оболочку FetchStudentsResult, моя десериализация работает отлично.

Я пробовал DataContractJsonSerializer, но результат точно такой же. Может кто-нибудь сказать мне, что мне не хватает?

Ответы [ 2 ]

25 голосов
/ 17 февраля 2012

Хорошо, я понял это сам. Проблема в следующей строке:

BodyStyle = WebMessageBodyStyle.Wrapped

Когда я изменил это на:

BodyStyle = WebMessageBodyStyle.Bare

Все отлично работает!

Спасибо!

0 голосов
/ 06 июня 2019

В моем случае это был WebInvoke вместо WebGet, и я отправлял данные в теле.Из-за этого это решение не сработало для меня.Я использовал приведенный ниже, и это сработало.

BodyStyle = WebMessageBodyStyle.RequestWrapped

Итак, в посте тело должно быть завернуто, но в ответе нет необходимостиСпасибо за вопрос и его ответ за то, что он дал подсказку об этой проблеме.

...