2

空の Json 結果または 2 つの json 結果のいずれかが表示されますが、まだ理由がわかりません。

ベースライン: http://learn.knockoutjs.com/mail?folder=Inbox は chrome F12 では次のようになります: {"id":"Inbox","mails":[{"id":1,.... ..}

私の行動:

public ActionResult Mail()
{
    string qs = "";
    foreach (var q in Request.QueryString)
    {

        qs += string.Format("{0}={1}&", q, Request.QueryString[q.ToString()]);
    }
    var proxyRequest = "http://learn.knockoutjs.com/mail?" + qs;
    var request = WebRequest.Create(proxyRequest);
    var response = (HttpWebResponse)request.GetResponse();



    var reader = new StreamReader(response.GetResponseStream());
    var str = reader.ReadToEnd();
    var data = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(str);

    //var json = JsonConvert.SerializeObject(data);  
        // Text Visualization looks good {"id":"Inbox","mails":[{"id":1,"from":"Abb....}
        // no outside quotes, no escaped quotes

        var res = Json(data, JsonRequestBehavior.AllowGet);
        return res;

}

したがって、基本的に私は呼び出しをプロキシしていますが、問題は、結果が入力されていないか、二重の jsoned として返される理由です。

chrome ネットワーク トレースを使用すると、上記の結果は次のようになります。[[[]]、[[[[[]]、[[]]、[[]]、[[]]、[[]]、...]

有効な json、空です。

コードを次のように変更すると

var json = JsonConvert.SerializeObject(data);  
// Text Visualization looks good {"id":"Inbox","mails":[{"id":1,"from":"Abb....}
// no outside quotes, no escaped quotes

var res = Json(json, JsonRequestBehavior.AllowGet);
return res;

Chrome ネットワーク トレースは、データを 2 倍に JSON 化しました。"{\"id\":\"Inbox\",\"メール\":[{\"id\":1,\"from\":\"Ab....}"

Jsonが実際に何であるかわからないので、 newton soft dynamic convert JsonConvert.DeserializeObject を行いました

それが私の空の応答の背後にある問題かもしれませんか?

どんな助けでも本当に感謝します。ありがとう

4

1 に答える 1

6

Json()JSON リーダーから返された動的オブジェクトを理解していないため、最初のメソッドは失敗しています。事前にシリアル化された文字列をシリアル化している
ため、2 番目の方法は失敗しています。Json()

以下を使用して、事前にシリアライズされた JSON データを返すことができます。Content(jsonString, "application/json")

于 2012-09-12T00:36:23.647 に答える