RESTful WCF使用方法名称包装json响应

时间:2012-02-16 14:11:37

标签: wcf json wcf-rest

我是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 个答案:

答案 0 :(得分:24)

好的,我已经弄明白了。问题出在下面一行:

BodyStyle = WebMessageBodyStyle.Wrapped

当我将其更改为:

BodyStyle = WebMessageBodyStyle.Bare

一切都很完美!

谢谢!

答案 1 :(得分:0)

在我的情况下,它是WebInvoke而不是WebGet,并且我在正文中发送数据。因此,该解决方案对我不起作用。我用了下面的一个,它起作用了。

BodyStyle = WebMessageBodyStyle.RequestWrapped

因此,在张贴时,应将尸体包裹起来,但无需做出回应。 感谢提问者和他的回答,为您提供了有关此问题的线索。