簡體   English   中英

客戶端上的JSON反序列化無法解析json字符串

[英]JSON deserialization on client side unable to parse the json string

在點擊錨標記后,控制器的動作被點擊。 在查詢字符串中傳遞了一個參數。 我正在使用以下代碼將List轉換為序列化的json字符串。

public ActionResult EmployeeVote(string regionID)
 {
   var nomineeList = NomineeModel.GetNomineeByRegionID(Convert.ToInt16(regionID));
   ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None);
   return View(ViewBag);
 }

這個json字符串我認為字符串的制作方式存在一些問題。

[{"Id":0,"EmpId":1,"FirstName":"First Last","Email":"mail@xyz.com","Description":null,"RegionID":0}]

在客戶端。 但是模型列表在反序列化時給出了錯誤。

$(function () {
            var modelList = JSON.parse('@ViewBag.NomineeList');
           $(modelList).each((function () { //some logic});
 });

我想執行一個遍歷循環以遍歷模型列表以創建一些動態元素。 有幫助嗎??

問題是@ViewBag.NomineeList將對json字符串進行HTML編碼。 您需要防止這種情況,但仍要確保該字符串是有效的JavaScript字符串。

在控制器中:

ViewBag.NomineeList = new JavaScriptSerializer().Serialize(
    JsonConvert.SerializeObject(nomineeList, Formatting.None)
    );

JavaScriptSerializer確保將字符串保存為在JS中使用,因此對新行進行了編碼等。

然后,在視圖中:

var modelList = JSON.parse(@Html.Raw(ViewBag.NomineeList));
  • 使用Html.Raw防止HTML編碼
  • 請勿將其用引號引起來,因為JavaScriptSerializer已完成此操作

更新:我添加了一個示例,您無需使用JavaScriptSerializer即可使其工作。 但我重新考慮了潛在的危險,因此將其刪除。 堅持使用JavaScriptSerializer上述方法,這是更安全的。

這是一個廣告解決方案:
更換 ”””

ViewBag.NomineeList = JsonConvert.SerializeObject(nomineeList,Formatting.None).Remove(" "");

還可以嘗試使用http://json.codeplex.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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