ページのプリレンダリング イベントで実行される Java スクリプト関数があります。
protected void Page_PreRender(object sender, EventArgs e)
{
var script = "<script>CreateProjectTree('" + serializedSearchCriteria + "');" + "</script>";
ClientScript.RegisterStartupScript(typeof (string), "createProjectTree", script);
}
上記の Java スクリプト関数に渡される変数は、Page_Load
イベントで入力されるシリアル化された JSON です。
serializedSearchCriteria = JsonConvert.SerializeObject(ProjectSearchCriteria);
これは、シリアル化された後の serializedSearchCriteria の値です。
{"QueryString":null,"ProjectName":"\"24\"","SeasonName":"","MemberName":"","CompanyName":"","CompanyRole":0,"CompanyRoles":"","Year":""}
シリアル化すると、 value の二重引用符が正常にエスケープされることがわかります24
。
ここでの問題は、デバッグ モードで Java スクリプト関数を見ると、変数 serializedSearchCriteria の値が次のようになっていることです。
{"QueryString":null,"ProjectName":""24"","SeasonName":"","MemberName":"","CompanyName":"","CompanyRole":0,"CompanyRoles":"","Year":""}"
今に気づく24
。もう逃げられません。したがって、このオブジェクトは、Java スクリプト関数内に入ると有効な JSON ではなくなります。
なぜこうなった?
オブジェクトはシリアル化されているはずです...ある時点で、シリアル化されていません。誰かが理由を知っていますか?