2012-02-16 17 views
9

Jestem całkiem nowy dla usług RESTful WCF, więc weź ze mną. Próbuję zbudować prostą usługę RESTful WCF, która zwraca listę studentów jako odpowiedź json. Wszystko działa dobrze, aż do momentu, w którym spróbuję przekonwertować ciąg json z powrotem na listę obiektów Ucznia na kliencie.RESTful odpowiedź json pakowania WCF z nazwą metody

Oto mój kontrakt operacja:

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

kod Klient:

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

Kod ten oczywiście nie powiedzie się, ponieważ ciąg json zwrócony przez usługę wygląda jak poniżej:

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

Z jakiegoś powodu odpowiedź json jest pakowana wewnątrz FetchStudentsResult. Teraz w trybie debugowania, jeśli zdecydowanie usunę ten wrap FetchStudentsResult, moja deserializacja działa doskonale.

Próbowałem DataContractJsonSerializer, ale wynik jest dokładnie taki sam. Czy ktoś może mi powiedzieć, czego mi brakuje?

Odpowiedz

22

Ok, sam to wymyśliłem. Problemem jest poniższa linia:

BodyStyle = WebMessageBodyStyle.Wrapped 

Kiedy zmieniłem to:

BodyStyle = WebMessageBodyStyle.Bare 

Wszystko działa doskonale!

Dzięki!

+0

Dzięki Vinod Twoje rozwiązanie pomogło mi; Jesteś ratownikiem życia. –