我希望将某些属性序列化为“对象”而不是字符串。例如。使用json.net序列化为对象
{ “onClickHandler”:OnClickHandler, “的onmouseout”:OnMouseOutHandler}
类DEF是这样的:
public class handlers {
public string OnClickHandler;
public string OnMouseOutHandler;
}
目前它出来为:
处理程序:{“onClickHandler”:“OnClickHandler”, “onMouseO ut“:”OnMouseOutHandler“}
正如您所能猜到的,这些是客户端事件处理程序,并且与其他地方定义的javascript函数相对应。通过在引号内发出它们,它们不会被解释为函数,而会被解释为文字字符串。
编辑:
得到暗示了戴维的答案,想出了一个办法:
for (var handler in this.handlers) {
if(window[this.handlers[handler]])
this.handlers[handler] = window[this.handlers[handler]];
};
,然后调用jQuery的绑定:
第一擦洗一点点通常为
$elem.bind(this.handlers);
接受Dave最接近的答案。
我使用jQuery绑定来连接处理程序。我不想使用eval,因为这会引入安全考虑。我可以忍受JSOn.parse失败或这是不符合JSON的。或者,还有更好的方法? – Mrchief 2010-12-21 17:06:35
window [string]不是eval()。例如,以“alert('evil')”作为字符串值来尝试。说到eval(),如果您成功使用手动构建的无效JSON和未引用的值,那么几乎肯定会通过eval()进行反序列化,因为JSON.parse不会接受它。 – 2010-12-21 18:05:33
好的!想出了一个方法来保持JSON兼容,并使其与jQuery绑定一起工作。看到我上面的编辑。 – Mrchief 2011-01-03 16:59:09