Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RESTful WCF wrapping json response with method name

Tags:

json

wcf

wcf-rest

I am pretty new to RESTful WCF services so bear with me. I am trying to build a simple RESTful WCF service that returns a List of Students as json response. All works well until the point where I try to convert the json string back to list of Student objects on the client.

Here is my operation contract:

[OperationContract]
[WebGet(UriTemplate = "Students/", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
public List<Student> FetchStudents()
{
//Fetch and return students list
}

Client code:

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);
}

This code obviously fails because the json string returned by the service looks like below:

{"FetchStudentsResult":[{"Course":"BE","Department":"IS","EmailID":"[email protected]","ID":1,"Name":"Vinod"}]}

For some reason the json response is getting wrapped inside the FetchStudentsResult. Now in debug mode if I forcefully remove this FetchStudentsResult wrap, my deserialization works perfectly fine.

I have tried DataContractJsonSerializer but the result is exactly the same. Can someone tell me what am I missing?

like image 892
Vinod Avatar asked Feb 16 '12 14:02

Vinod


1 Answers

Ok, I have figured it out myself. The problem is the below line:

BodyStyle = WebMessageBodyStyle.Wrapped

When I changed this to:

BodyStyle = WebMessageBodyStyle.Bare

Everything works perfectly!

Thanks!

like image 108
Vinod Avatar answered Nov 15 '22 19:11

Vinod