RESTful WCF обертывание ответа json с именем метода

Я новичок в 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":"[email protected]","ID":1,"Name":"Vinod"}]}

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

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

Ответ 1

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

BodyStyle = WebMessageBodyStyle.Wrapped

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

BodyStyle = WebMessageBodyStyle.Bare

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

Спасибо!

Ответ 2

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

BodyStyle = WebMessageBodyStyle.RequestWrapped

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