2014-05-14 139 views
0

我正在嘗試編寫一個WCF服務(A),該服務又調用另一個服務(B)。這不是問題。問題是是b返回JSON,這個我想從這裏A.返回是我的代碼:WCF服務返回另一個服務返回的JSON

public class Service1 : IService1 
{ 
    public string GetData(int value) 
    { 
     WebRequest wr = WebRequest.Create("//url_to_B//"); 
     String username = "user"; 
     String password = "password"; 
     String encoded = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password)); 
     wr.Headers.Add("Authorization", "Basic " + encoded); 
     Stream resStream = wr.GetResponse().GetResponseStream(); 
     StreamReader resReader = new StreamReader(resStream); 
     String response = resReader.ReadToEnd(); 
     resReader.Close(); 
     resStream.Close(); 
     return response; 
    } 
} 

和:

[ServiceContract] 
public interface IService1 
{ 

    [OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] 
    string GetData(int value); 
} 

輸出作爲小提琴手發現:
B:

[{"id":"10103","key":"CAMMOT"}] 

答:

"[{\"id\":\"10103\",\"key\":\"CAMMOT\"}]" 

如果調用返回的值,則返回的值是一個字符串,其數據可以解析爲json。我將如何去返回json呢?任何幫助讚賞。謝謝。

+0

請向我們展示從'A'返回的字符串格式: –

+0

添加示例返回值我可以在Fiddler中看到:) –

+1

請參閱http://stackoverflow.com/questions/2086666/how-do-i-return-乾淨的json-from-a-wcf-service也許。 –

回答

1

通過返回Stream,您可以返回原始字符串:

public class Service1 : IService1 
{ 
    public System.IO.Stream GetData(int value) 
    { 
     WebRequest wr = WebRequest.Create("//url_to_B//"); 
     String username = "user"; 
     String password = "password"; 
     String encoded = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password)); 
     wr.Headers.Add("Authorization", "Basic " + encoded); 
     return wr.GetResponse().GetResponseStream(); 
    } 
} 
+0

謝謝!這麼簡單,正是我所需要的:) –

+0

不客氣:) – sroes

0

WCF綁定將使用jsonSerializer作爲MessageEncoder,具體,如果你指定

ResponseFormat = WebMessageFormat.Json 

然後,它會處理字符串作爲JSON對象的一部分(一個屬性)並編碼「as \」以避免與json語法衝突。

只要刪除ResponseFormat = WebMessageFormat.Json,它應該可以根據需要工作。