Ответ 1
Хорошо, я сам это понял. Проблема заключается в следующей строке:
BodyStyle = WebMessageBodyStyle.Wrapped
Когда я изменил это на:
BodyStyle = WebMessageBodyStyle.Bare
Все работает отлично!
Спасибо!
Я новичок в 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, но результат точно такой же. Может кто-нибудь сказать мне, что мне не хватает?
Хорошо, я сам это понял. Проблема заключается в следующей строке:
BodyStyle = WebMessageBodyStyle.Wrapped
Когда я изменил это на:
BodyStyle = WebMessageBodyStyle.Bare
Все работает отлично!
Спасибо!
В моем случае это был WebInvoke вместо WebGet, и я отправлял данные в теле. Из-за этого это решение не сработало для меня. Я использовал один ниже, и это сработало.
BodyStyle = WebMessageBodyStyle.RequestWrapped
Таким образом, в сообщении, тело должно быть завернуто, но нет необходимости в ответе. Спасибо за вопрос и его ответ для того, чтобы дать подсказку об этой проблеме.