2011-01-07 148 views
0

我創建使用詹姆斯·牛頓 - 國王的優秀JSON libary JSON字符串 我創建使用下面的代碼行的JSON字符串:JSON字符串不能被解析

string userJSON = Newtonsoft.Json.JsonConvert.SerializeObject(existingAdminUser, Newtonsoft.Json.Formatting.None); 

結果看起來如下:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"[email protected]\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}" 

我然後使用下面的代碼行把這個字符串轉換成我的HTTP響應:

HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + userJSON + "\" />"); 

我再試圖訪問/解析JSON在客戶端,使用:

var userdetails = $.parseJSON(valueOfHiddenField); 

解析嘗試失敗,如果我嘗試查看該字段的內容(使用警報),那麼我只看到了非常先{char。看起來,\「字符序列被js視爲一個換行符,我怎樣才能在服務器上對隱藏字段值進行編碼,或者如何處理客戶端的隱藏字段值,以便」處理「 「字符序列?

非常感謝。

回答

1

所以我們在這裏有一點逃避/編碼混亂。您的字符串:

"{\"LoginId\":\"0f1b6c88-08ec-416f-b221-7568dc7c242a\",\"Firstname\":\"Charles\",\"Surname\":\"Barber\",\"Fullname\":\"Charles Barber\",\"Email\":\"[email protected]\",\"Systems\":null,\"IsValid\":false,\"IsValidExcludingSystems\":true,\"ValidationMessage\":\"\"}" 

是不正確的,除非它顯示在某些C#上下文中(例如Visual Studio調試器)。所有這些斜線只有在你把它放在C#源代碼中時才需要。如果將它分配給一個變量,變量將存儲它而不用斜線,因爲它們僅用於在C#代碼中轉義。它們不能成爲問題的根源,因爲它們只存在於Visual Studio調試器中,而不存在於應用程序中。

但是,您不能只將JSON插入到HTML中。它包含幾個字符(例如第二個位置的雙引號),因爲它們在HTML中有特殊含義,所以必須轉義。

所以,你的修復應該是:

HttpContext.Current.Response.Write("<input type=\"hidden\" name=\"adminextrainfo\" id=\"adminextrainfo\" value=\"" + Server.HtmlEncode(userJSON) + "\" />"); 
+0

這做到了 - 非常感謝 – DEH 2011-01-07 11:41:28