[英]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.