【问题标题】:ASP.NET MVC 4 return Json resulting in double json or empty dataASP.NET MVC 4 返回 Json 导致双 json 或空数据
【发布时间】:2012-09-12 00:34:46
【问题描述】:

我得到了空的 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\":\"Inbox\",\"mails\":[{\"id\":1,\"from\":\"Ab....}"

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

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

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

【问题讨论】:

  • 如果您对答案感到满意,可以点击答案旁边的复选框接受吗?

标签: asp.net-mvc-4 json.net jsonresult


【解决方案1】:

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

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

【讨论】:

  • 我希望 newtonsoft.json 实现有一个 MVC 扩展来处理动态对象作为 JsonResults。我知道我会在大约 6 个月内忘记这一点。谢谢
  • @SLaks,我认为这是一个不好的做法。 Chrome 在控制台中具有不可预测的效果。
  • @CodeFarmer:你在说什么?
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 2014-03-30
  • 2020-12-29
  • 1970-01-01
  • 2012-05-07
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多