【问题标题】:Convert Object to JSON in MVC 4在 MVC 4 中将对象转换为 JSON
【发布时间】:2013-07-02 07:44:45
【问题描述】:

我正在使用 JavaScriptSerializer 将对象转换为 JSON,我可以在服务器代码中看到这个 JSON 输出:

[{"UserId":1,"UserName":"Admin"}]

但在 UI 中,它正在转换为如下所示的内容

[{"UserId":1,"UserName":"Admin"}].

如何逃脱那些"

【问题讨论】:

    标签: json asp.net-mvc-4


    【解决方案1】:

    如果您使用的是 Razor 视图引擎,则需要使用 Html.Raw 方法:

    <script type="text/javascript">
        var model = @Html.Raw(Json.Encode(Model));
    </script>
    

    注意Json.Encode 方法的使用,它更短且等效于new JavaScriptSerializer().Serialize()

    【讨论】:

    • +infinity 说明这两个语句是一样的。
    【解决方案2】:

    你为什么要这样做?为什么不直接返回JsonResult

    public ActionResult MyMethod()
    {
        List<ListItem> list = new List<ListItem>() {
            new ListItem() { UserId = "1", UserName = "Admin" },
            new ListItem() { UserId = "2", UserName = "JohnDoe" },
            new ListItem() { UserId = "3", UserName = "JaneDoe" }};
    
        return this.Json(list);
    }
    

    【讨论】:

    • 关于您上次的编辑,为什么指定ActionResult 作为返回类型而不是JsonResult 更好?
    • @YannickBlondeau - JsonResult 一个 ActionResult。为了减少耦合,我更喜欢返回类型是可接受的最通用的类​​型。例如,如果您决定将返回类型更改为 XML,则可以这样做而不必同时更改返回类型。只是我的个人政策。
    【解决方案3】:

    关于 Darin Dimitrov 的回答还有一件事。在我的 VS2012 中,分号出现编译错误,因为 JS 端的语句实际上是“var model = ;”。 一种使用一对引号来包装 Razor 部分的方法,如下所示:

    var model = "@Html.Raw(Json.Encode(Model))";
    

    这不会导致任何错误。

    Json.Encode() 似乎是 JavaScriptSerializer 的包装函数。我不确定后者是否更省时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 2018-08-08
      相关资源
      最近更新 更多