【问题标题】:JSON trouble serializing using .net Json使用 .net Json 序列化 JSON 问题
【发布时间】:2013-11-27 06:05:11
【问题描述】:

请帮助一个新手... ;-x

我使用 jQuery 调用 .net WebAPI 来进行 Get 调用。后端是 SQL Server。

在WebAPI中,我使用实体框架调用存储过程。

 var cat = ent.GetCategories();

 return Json.Encode(cat);

这会获取数据,但返回浏览器时,数据看起来像这样,它没有插入我的下拉列表。我猜它与转义反斜杠有关。我该如何解决这个问题?

"[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]"

【问题讨论】:

    标签: json jquery asp.net-web-api json.net getjson


    【解决方案1】:

    jQuery.ajax() 这太简单了。像下面这样试试

    jQuery.ajax({ 
        type: "GET"  //or POST,
        dataType: "json", 
        url: "your url",
        success: function(data) {   
            //data returns ["Housing","Jobs","For Sale","Community","Services"]
        }
    }); 
    

    对于simple and nice explanation

    通过设置dataType: "json" 你告诉jQuery解析 以 JSON 格式接收数据,因此将数据传递给 success() 函数 作为 Javascript 数组。

    【讨论】:

      【解决方案2】:

      问题是您正在对结果进行双重序列化。 Web API 为您进行序列化,因此您无需调用Json.Encode()。相反,只需让您的 API 控制器方法返回 cat

      【讨论】:

      • 原来我没有编码,返回了cat。但在浏览器端,我收到错误消息:“ExceptionMessage”:“'ObjectContent`1' 类型未能序列化内容类型'application/json;”的响应正文; ...所以我尝试像上面那样对其进行编码。然后我没有收到错误消息,但现在返回的结果如上所示,我不能像往常一样在回调中使用返回的数据。不确定这是否重要,但我有这样的 webAPI 函数: public dynamic Get(string filter) ...动态返回类型重要吗?
      • 好吧,我尝试了一些不同的方法并且它有效。但是通话速度非常慢(4+秒)。在 webApi 中,我声明了一个 List 列表。使用 Entity Framework,我调用 store proc 并通过 foreach 循环运行返回的对象。对于找到的每个项目,我将其添加到“列表”中。然后我返回“列表”(没有任何直接的 json 编码)。这有效,但速度非常慢。这是使用 .net webAPI 访问 store proc 以从 SQL Server 获取数据的 JQuery 获取数据的糟糕方法吗?
      • 如果您从 API 方法返回 List<string>,那么您应该将其声明为方法的返回类型(IEnumerable<string> 也应该有效)。当类型已知时,我不会创建返回类型dynamic。序列化一个简短的字符串列表本身不应该很慢。我一直在我的 Web API 代码中这样做,一点问题都没有。您确定性能问题不在于您的存储过程或您正在做的其他事情吗?
      【解决方案3】:

      如果返回的数据类似于"[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]",在填充下拉列表之前您可以执行以下操作:

      var escaped = "[\"Housing\",\"Jobs\",\"For Sale\",\"Community\",\"Services\"]";
      var result = $("<div />").html(escaped).text();
      

      之后result 将具有以下值"["Housing","Jobs","For Sale","Community","Services"]"

      然后您可以调用jQuery parse 函数来获取可以填充到下拉列表中的 javascript 数组:

      var jsArr = $.parseJSON(result);
      

      【讨论】:

        猜你喜欢
        • 2016-06-17
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多