REST风格的WCF包装方法名称的JSON响应

问题描述:

我对RESTful WCF服务非常新,所以请耐心等待。我正在尝试构建一个简单的RESTful WCF服务,它返回一个学生列表作为json响应。所有工作都很好,直到我尝试将json字符串转换回客户端上的Student对象列表。REST风格的WCF包装方法名称的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":"[email protected]","ID":1,"Name":"Vinod"}]} 

出于某种原因,json响应正在被包装在FetchStudentsResult中。现在在调试模式下,如果我强制删除这个FetchStudentsResult包装,我的反序列化工作完全正常。

我试过DataContractJsonSerializer,但结果完全一样。有人能告诉我我错过了什么吗?

好吧,我已经弄清楚了。问题是以下行:

BodyStyle = WebMessageBodyStyle.Wrapped 

当我把它改为:

BodyStyle = WebMessageBodyStyle.Bare 

一切完美的作品!

谢谢!

+0

谢谢维诺德您的解决方案帮助我;你是一个拯救生命的人。 – 2013-03-14 05:46:35