JavaScriptSerializer序列化一个javascript函数名

时间:2010-09-09 17:38:37

标签: asp.net json html-helper javascriptserializer

我在项目中使用Flexigrid在网格工具栏上添加一个按钮我可以使用这样的代码:

...    
"buttons":[
    {"name":"Modifica","bclass":"edit","onpress":"doCommand"},
    {"name":"Elimina","bclass":"delete","onpress":"doCommand"}
],
...

无论如何,“onpress”属性应包含对js回调的引用,因此该字段不应包含在引号内。

我使用JavaScriptSerializer类(在System.Web.Script.Serialization命名空间中)进行序列化。

我如何声明变量以使JavaScriptSerializer像这样序列化?

...    
"buttons":[
    {"name":"Modifica","bclass":"edit","onpress":doCommand},
    {"name":"Elimina","bclass":"delete","onpress":doCommand}
],
...

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

这招怎么样?

var param = new Dictionary<string,string>();

param["onpress"] = "%doCommand%";

return new JavaScriptSerializer().Serialize( param ).Replace( "\"%", "" ).Replace( "%\"", "" );

答案 1 :(得分:0)

JavaScriptSerializer用于序列化为JSON,JSON不能表示函数;它也不能引用先前定义的变量。所以我不相信这是可能的。

答案 2 :(得分:0)

据我所知,使用.NET序列化程序没有本地方法可以执行此操作,但是您可以在客户端执行以下代码以将onpress JSON字符串转换为回调...

var buttons = []; // Your JSON array
for(var i = 0; i < buttons.length; i++) {
  var b = buttons[i];
  b.onpress = window[b.onpress];
}

答案 3 :(得分:0)

您可以将函数名称存储为字符串

...    
"buttons":[
    {"name":"Modifica","bclass":"edit","onpress":"doCommand"},
    {"name":"Elimina","bclass":"delete","onpress":"doCommand"}
],
...