2014-05-14 239 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,它应该可以根据需要工作。