C#从MVC Controller返回Plain Json

时间:2016-07-22 17:43:11

标签: c# json asp.net-mvc

我正在尝试将数据作为普通的Json,从我的控制器发送到我的MVC应用程序的客户端。数据最初是作为对象列表收集的,但我无法将其转换为直接Json。现在我控制器中的代码如下:

[HttpGet]
public JsonResult SecurityPermissionsTableData()
{
    List<SecurityPermissionsGridModel> list = securityPermissionsTable.Get(System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\').Last());

    string json = JsonConvert.SerializeObject(new
    {
        data = list
    });

    return ResultJson(json);
}

public JsonResult ResultJson(object data)
{
    return new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = data };
}

当我使用JsonConvert.SerializeObject()函数时,它返回一个字符串:

"{\"data\":[{\"Username\":\"loganfg\",\"readbutton\":null,\"editbutton\":null,\"deletebutton\":null}]}"

但是我需要以以下形式返回普通的Json:

{"data":[{"Username":"lgilmore","readbutton":"<a onclick='SP_read(\"7\")' class='SRKbutton tiny SP_rbutton'>Details</a>","editbutton":null,"deletebutton":null}]}

如何将serialize函数返回的字符串转换为普通Json?或者我如何更改ResultJson()函数以正确处理和转换字符串?

2 个答案:

答案 0 :(得分:5)

JsonResult已为您序列化对象。
因此,它将字符串序列化为JSON字符串文字。

你应该摆脱所有代码,只需

return Json(list, JsonRequestBehaviour.AllowGet);

答案 1 :(得分:2)

您可以简单地使用Json方法。

将要转换的对象传递给json作为参数。

public JsonResult SecurityPermissionsTableData()
{
   var permissionList = securityPermissionsTable
                .Get(System.Security.Principal.WindowsIdentity.GetCurrent()
                .Name.Split('\\').Last());
   return Json(permissionList , JsonRequestBehaviour.AllowGet);
}