WCF服务返回另一个服务返回的JSON

时间:2014-05-14 09:34:19

标签: c# json wcf httprequest

我正在尝试编写一个WCF服务(A),该服务又调用另一个服务(B)。这不是问题。问题是B返回json,我想从A返回。这是我的代码:

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

Fiddler中的输出:
B:

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

A:

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

如果调用A返回的值是一个字符串,其数据可以解析为json。我怎么回事json呢?任何帮助赞赏。感谢。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

如果指定

,WCF绑定将使用jsonSerializer作为MessageEncoder
 ResponseFormat = WebMessageFormat.Json

然后它将处理字符串作为Json对象(属性)的一部分并编码"作为\"避免与json语法冲突。

只需删除ResponseFormat = WebMessageFormat.Json即可,它应该可以正常工作。