我正在尝试编写一个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呢?任何帮助赞赏。感谢。
答案 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即可,它应该可以正常工作。