[英]Serialize as object using json.net
我希望某些属性被序列化为“对象”而不是字符串。 例如
{“onClickHandler”:OnClickHandler,“onMouseOut”:OnMouseOutHandler}
类def是这样的:
public class handlers {
public string OnClickHandler;
public string OnMouseOutHandler;
}
目前它出现为:
处理程序:{“onClickHandler”:“OnClickHandler”,“onMouseOut”:“OnMouseOutHandler”}
您可以猜到,这些是客户端事件处理程序,并对应于其他地方定义的javascript函数。 通过在引号内发出它们,它们不被解释为函数而是作为文字字符串。
编辑:
从Dave的回答中得到一个提示,想出了一个方法:
先刷一点点:
for (var handler in this.handlers) {
if(window[this.handlers[handler]])
this.handlers[handler] = window[this.handlers[handler]];
};
然后正常调用jQuery bind
$elem.bind(this.handlers);
接受Dave的回答是最接近的。
JSON不支持表示函数。 JSON由值数组和对象(包含变量)组成。 JSON中的值只能是字符串,数字,对象或数组(请参阅链接页面以获得很好的语法图)。
你所追求的是javascript代码,而不是JSON对象。 如果您想要发出对其他地方定义的函数的引用,您可能必须(颤抖)使用eval
来执行它。
正如其他人提到的那样,无论如何都不是有效的JSON(这使你不能使用JSON.parse(),以及其他潜在的缺点)。
如果您的事件处理函数在全局窗口范围中定义,您可以像这样调用它们:
// This is equivalent to defining window.clickEventHandler or
// window['clickEventHandler'] as a function variable.
function clickEventHander() {
// Magic.
}
// Valid JSON, using strings to reference the handler's name.
var json = '{"onClickHandler": "clickEventHandler"}'
// You might be using eval() or a framework for this currently.
var handlerMappings = JSON.parse(json);
window[handlerMappings.onClickHandler]();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.