1

これに似た質問がありますが、JSON に自動的に解析されるオブジェクトを返す必要がありました。

JSON 形式のデータで構成される文字列があり、Ajax で読み取ることができるように、WCF Web サービスから返すだけです。

文字列を返すだけでは機能しません (ajax からパーサー エラーが発生します)。Web サービスから JSON 文字列を返す特定の方法があるかどうか疑問に思っていましたか?

Web サービスを提供する他の外部 json でテストしたため、私の ajax は問題ありませんが、自分の ajax では動作しません (したがって、返されるデータであると想定しています)。

参考までに、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 "Raw" Programming Modelに関するこの投稿を参照してください。

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 に答える