2012-09-12 42 views
2

我得到空的JSON结果或双JSON结果,我不知道为什么呢?ASP.NET MVC 4返回Json导致双JSON或空数据

基线: http://learn.knockoutjs.com/mail?folder=Inbox 看起来像这样在铬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; 

} 

所以基本上我进行代理的电话,但问题是为什么是赶回来,无论是不是在或双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的网络跟踪了一倍jsoned数据。 “{\”id \“:\”Inbox \“,\”mails \“:[{\”id \“:1,\”from \“:\”Ab ....}“

因为我不知道是什么JSON的其实是,我做了牛顿软动态转换 JsonConvert.DeserializeObject

这可能是我的身后空响应的问题?

任何帮助将真正理解。 感谢

+0

回到预先序列化JSON数据。如果你满意的回答,您可以点击旁边的复选框答案接受呢? – McGarnagle

回答

6

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

可以使用Content(jsonString, "application/json")

+1

成功:var res = Content(str,“application/json”);工作.. –

+0

我希望newtonsoft.json实现将有一个MVC扩展来处理动态对象作为JsonResults。我知道我会在大约6个月内忘记这一点。 谢谢 –

+0

@SLaks,我认为这是一个不好的做法。 Chrome在控制台中引发不可预测的影响。 – CodeFarmer