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
一切完美的作品!
谢谢!
谢谢维诺德您的解决方案帮助我;你是一个拯救生命的人。 – 2013-03-14 05:46:35