我希望將某些屬性序列化爲「對象」而不是字符串。例如。使用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