2

我得到空的 Json 结果或双 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 网络跟踪已将数据翻倍。"{\"id\":\"收件箱\",\"邮件\":[{\"id\":1,\"from\":\"Ab....}"

由于我不知道 Json 实际上是什么,所以我做了牛顿软动态转换 JsonConvert.DeserializeObject

这可能是我空洞回应背后的问题?

任何帮助将不胜感激。谢谢

4

1 回答 1

6

您的第一个方法失败了,因为Json()不理解从您的 JSON 阅读器返回的动态对象。
您的第二种方法失败了,因为Json()正在序列化预序列化的字符串。

您可以使用返回预序列化的 JSON 数据Content(jsonString, "application/json")

于 2012-09-12T00:36:23.647 回答