2014-03-05 2 views
3

jsonDataTable을 반환하는 REST 서비스를 가지고 있습니다.json 데이터 테이블을 반환하는 데이터가 수신되지 않습니다.

내가 서비스를 요청할 때 아무런 데이터도 얻지 않지만 (크롬에서 "데이터가 수신되지 않음"), 반환 유형을 string으로 변경하고 일련 번호가 DataTable 인 문자열을 반환하면 모든 것이 올바르게 작동합니다 Json 문자열을 구문 분석해야합니다.)

//Doesn't Work 
[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "data")] 
public DataTable LoadData2() { 

    return JsonQueryDatabase2(VCAPSProduction); 
} 

.

// Works, but returns a json string 
[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "data")] 
public string LoadData2() { 

    return JsonConvert.SerializeObject(JsonQueryDatabase2(connString)); 
} 

DataTable을 사용하여 Json 개체를 반환하도록 서비스를받을 수 있습니까?

+1

이 때문에 당신이, 다른 쪽 끝에서 데이터 테이블을 얻을 대신 개체의 목록을 채우고 있다는에는 직렬화한다 , 일반적으로 대회입니다. http://stackoverflow.com/questions/16441880/how-to-return-json-object –

+1

WCF는 기본적으로 Json.Net을 사용하지 않습니다. Json.Net을 serialiazer로 사용하려면 [this] (http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx)를 사용하거나, System.ServiceModel.Channels.Message' 이제 Json.Net으로 채우십시오. ('return WebOperationContext.Current.CreateTextResponse (serializeHere)') –

+1

@Paul 목록을 반환하고 작동하고 있습니다. 감사. – kschieck

답변

2

나는 L.B의 제안으로 끝났다. 당신이 serialising하는 '객체'는 데이터 테이블이기 때문에

using Newtonsoft.Json; // JsonConvert.SerializeObject 

은 ...

[OperationContract] 
[WebGet(ResponseFormat = WebMessageFormat.Json, 
     UriTemplate = "data?limit={limit}")] 
public System.ServiceModel.Channels.Message LoadData_Limited(int limit) { 

    if (limit <= 0) { return null; } 

    string query = ...; 

    try { 

     ... 

     //Return data from query 
     DataTable dt = QueryDatabase(connString, query, parameters); 
     string serialized = JsonConvert.SerializeObject(dt); 
     return WebOperationContext.Current.CreateTextResponse(serialized); 

    } catch { 
     return null; 
    } 
} 
관련 문제