为JsonResult MVC将JS函数序列化为JSON

本文关键字:序列化 JSON 函数 JsonResult MVC JS | 更新日期: 2023-09-27 18:17:58

我正在为SlickGrid编写一个后端。我有一个AJAX调用,从MVC控制器加载列定义。控制器看起来像这样:

Public ActionResult GetColumns(...){
    List<object> columns;
    foreach(var col in MyColumns){
        columns.Add(new { id = col.id, name = col.name, width = col.width});
    }
    return Json(new { columns = columns });
}

slickgrid接受的列属性之一是formatter,它接受一个js函数名。

不幸的是,MVC将该名称放在双引号中。我需要弄清楚是否有一种方法可以只序列化一个不带引号的字段。

(这是我想要的)
[{"id":1,"Name":"FirstName","width":50,"formatter":NameFormater},...]

vs(这是我现在得到的)

[{"id":1,"Name":"FirstName","width":50,"formatter":"NameFormater"},...]

我知道这不是正确的JSON格式传递JS代码(正确的JS格式虽然)。但是我在这里有一个有效的用例,我试图不增加太多的复杂性。

为JsonResult MVC将JS函数序列化为JSON

您可以用特殊字符(如

)包装单词NameFormater
[{"id":1,"Name":"FirstName","width":50,"formatter":"#NameFormater#"},...]

当你得到你的结果回来,如果你使用javascript

 function(result){
    result = result .replace(/"#/g, "");
    result = result .replace(/#"/g, "");

// result now =  [{"id":1,"Name":"FirstName","width":50,"formatter":NameFormater},...]
//    ...Pass result to SlickGrid
    }