Vin*_*nod 11 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
}
Run Code Online (Sandbox Code Playgroud)
客户代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
此代码显然失败,因为服务返回的json字符串如下所示:
{"FetchStudentsResult":[{"Course":"BE","Department":"IS","EmailID":"b@gmail.com","ID":1,"Name":"Vinod"}]}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,json响应被包装在FetchStudentsResult中.现在处于调试模式,如果我强行删除这个FetchStudentsResult包装,我的反序列化工作完全正常.
我试过DataContractJsonSerializer但结果完全一样.有人能告诉我我错过了什么吗?
Vin*_*nod 26
好的,我自己已经弄清楚了.问题是以下行:
BodyStyle = WebMessageBodyStyle.Wrapped
Run Code Online (Sandbox Code Playgroud)
当我把它改成:
BodyStyle = WebMessageBodyStyle.Bare
Run Code Online (Sandbox Code Playgroud)
一切都很完美!
谢谢!
归档时间: |
|
查看次数: |
8637 次 |
最近记录: |