1

有类似的问题,但它们涉及返回自动解析为 JSON 的对象。

我有一个包含 JSON 格式数据的字符串,我只想从我的 WCF Web 服务返回,以便我可以在 ajax 中读取它。

它不能通过简单地返回字符串来工作(我从 ajax 得到一个解析器错误)。我想知道是否有一种特定的方式可以让我从 Web 服务返回我的 JSON 字符串?

我的 ajax 很好,因为我已经使用其他提供 Web 服务的外部 json 对其进行了测试,但它不适用于我自己的(所以我假设它是我要返回的数据)。

作为参考,这里是获取和返回 JSON 的重要部分:

WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
return reader.ReadToEnd();

和接口声明:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string DoWork();

感谢您的时间。

4

1 回答 1

7

如果您不希望 WCF 在您的响应中使用任何格式(即,不将其转换为您当前拥有的字符串),您可以Stream从操作中返回 a。这样,WCF 将按原样返回流中的字节(请参见下面的示例代码)。您可以在这篇关于WCF“原始”编程模型的帖子中阅读更多相关信息。

public class StackOverflow_11342272
{
    [ServiceContract]
    public class Service
    {
        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public Stream DoWork()
        {
            string json = "{\"name\":\"John Doe\",\"age\":33,\"married\":true}";
            WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
            return ms;
        }
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
        WebServiceHost host = new WebServiceHost(typeof(Service), new Uri(baseAddress));
        host.Open();
        Console.WriteLine("Host opened");

        WebClient c = new WebClient();
        Console.WriteLine(c.DownloadString(baseAddress + "/DoWork"));

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
于 2012-07-05T14:29:06.507 回答