Asp.net mvc 4 ASP.NET MVC 4返回Json,导致双Json或空数据

Asp.net mvc 4 ASP.NET MVC 4返回Json,导致双Json或空数据,asp.net-mvc-4,json.net,jsonresult,Asp.net Mvc 4,Json.net,Jsonresult,我得到的不是空Json结果就是双Json结果,我还不知道为什么? 基线: 在chrome F12中看起来是这样的:{“id”:“收件箱”,“邮件”:[{“id”:1,…} 我的行动: public ActionResult Mail() { string qs = ""; foreach (var q in Request.QueryString) { qs += string.Format("{0}={1}&", q, Request.Quer

我得到的不是空Json结果就是双Json结果,我还不知道为什么?

基线: 在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;

}
Chrome network trace已将数据加密了一倍。 “{\'id\':\'Inbox\',\'mails\':[{\'id\':1,\'from\':\'Ab..}”

因为我不知道Json实际上是什么,所以我做了newton软动态转换 JsonConvert.DeserializeObject

这可能就是我空洞回答背后的问题

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

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


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

我希望newtonsoft.json实现有一个MVC扩展,可以将动态对象作为JsonResults处理。我知道我会在大约6个月后忘记这一点。Thanks@SLaks,我认为这是一种不好的做法。Chrome会在控制台中产生不可预测的效果。@CodeFarmer:你们在说什么?若你们对answ满意的话呃,你能点击答案旁边的复选框接受吗?
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;