我相当喜欢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,但结果完全一样.有人可以告诉我我失踪了什么吗?
解决方法
好的,我已经弄清楚了.问题是下面的一行:
BodyStyle = WebMessageBodyStyle.Wrapped
当我更改为:
BodyStyle = WebMessageBodyStyle.Bare
一切都很完美!
谢谢!