ASP.NET MVC 4返回Json导致双json或空数据

Her*_*ahl 2 json.net jsonresult asp.net-mvc-4

我得到空的Json结果或双json结果,我不知道为什么呢?

基线:http : //learn.knockoutjs.com/mail? folder=Inbox在chrome F12中看起来像这样:{"id":"收件箱","邮件":[{"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;

}
Run Code Online (Sandbox Code Playgroud)

所以基本上我代理了这个电话,但问题是为什么结果会回来,因为要么没有填写,要么双重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;
Run Code Online (Sandbox Code Playgroud)

Chrome网络跟踪数据增加了一倍."{\" ID\":\" 收件箱\",\ "邮件\":[{\ "ID \":1,\ "从\":\ "抗体....}"

由于我不知道Json究竟是什么,我做了牛顿软动态转换JsonConvert.DeserializeObject

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

真的很感激任何帮助.谢谢

SLa*_*aks 6

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

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