簡體   English   中英

使用json.net序列化為對象

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM