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

Posted

技术标签:

【中文标题】RESTful WCF 使用方法名称包装 json 响应【英文标题】:RESTful WCF wrapping json response with method name 【发布时间】:2012-03-07 22:30:43 【问题描述】:

我对 RESTful WCF 服务还很陌生,所以请多多包涵。我正在尝试构建一个简单的 RESTful WCF 服务,该服务将学生列表作为 json 响应返回。一切正常,直到我尝试将 json 字符串转换回客户端上的学生对象列表。

这是我的运营合同:

[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,但结果完全一样。谁能告诉我我错过了什么?

【问题讨论】:

【参考方案1】:

好的,我自己想通了。问题出在下面一行:

BodyStyle = WebMessageBodyStyle.Wrapped

当我将其更改为:

BodyStyle = WebMessageBodyStyle.Bare

一切正常!

谢谢!

【讨论】:

感谢 Vinod 您的解决方案帮助了我;你是救生员。【参考方案2】:

就我而言,它是 WebInvoke 而不是 WebGet,我在正文中发送数据。因此,此解决方案对我不起作用。我已经使用了下面的一个,它有效。

BodyStyle = WebMessageBodyStyle.RequestWrapped

所以在 post 中,body 应该被包裹,但不需要响应。 感谢提问者和他的回答提供了有关此问题的线索。

【讨论】:

以上是关于RESTful WCF 使用方法名称包装 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JSON 请求从 fiddler 调用 wcf restful 服务?

应用程序/json内容类型请求的Restful WCF POST问题

Android 向 WCF RESTful WS 发布请求(JSON 参数)

使用 transportCredentialOnly 安全性对 RESTful WCF 服务的跨域 Ajax JSON POST 支持

WCF Restful CORS 无法执行 POST

如何对 WCF 4 RESTful 服务进行身份验证?