2016-07-31 105 views
0

我工作在在线模式/断开应用程序和ASPNET开发人员的书HTML5编程中找到一个例子。ASPNET LocalStorage Json反序列化

我使用ASPNET技术MVC5。

我有一个错误,当我在我的控制器反序列化数据:(?报价问题)

public JsonResult SaveResults() 
    { 
     string jsonData = string.Empty; 
     using (StreamReader sr = new StreamReader(Request.InputStream)) 
     { 
      jsonData = sr.ReadToEnd(); 
     } 
     Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonData); 

     SurveyDbEntities db = new SurveyDbEntities(); 

     User usr = new User(); 
     usr.FirstName = data["FirstName"]; 
     usr.LastName = data["LastName"]; 
     usr.Email = data["Email"]; 
     db.Users.AddObject(usr); 
     db.SaveChanges(); 

     string userEmail = data["Email"]; 
     int usrId = (from item in db.Users 
         where item.Email == userEmail 
         select item.UserID).SingleOrDefault(); 

     data.Remove("FirstName"); 
     data.Remove("LastName"); 
     data.Remove("Email"); 

     foreach (string str in data.Keys) 
     { 
      int choiceId = int.Parse(str); 
      int questionId = int.Parse(data[str]); 
      Result result = new Result(); 
      result.QuestionID = questionId; 
      result.ChoiceID = choiceId; 
      result.UserID = usrId; 
      db.Results.AddObject(result); 
     } 
     db.SaveChanges(); 
     return Json("success"); 
    } 

此行显示了错误

Dictionary<string, string> data = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonData); 

我jsonData:

{"Email":"[email protected]","FirstName":"test","LastName":"test","container":"<div data-questions-questionid="1" class="paddedDiv">Which programming language do you use?<br><input type="checkbox" data-choices-questionid="1" data-choices-choiceid="1"><span>C#</span><br><input type="checkbox" data-choices-questionid="1" data-choices-choiceid="2"><span>VB.NET</span><br><input type="checkbox" data-choices-questionid="1" data-choices-choiceid="3"><span>PHP</span></div><div data-questions-questionid="2" class="paddedDiv">Which of the following browsers do you use while developing websites?<br><input type="checkbox" data-choices-questionid="2" data-choices-choiceid="4"><span>IE9</span><br><input type="checkbox" data-choices-questionid="2" data-choices-choiceid="5"><span>Firefox</span><br><input type="checkbox" data-choices-questionid="2" data-choices-choiceid="6"><span>Chrome</span></div><div data-questions-questionid="3" class="paddedDiv">Which of the following tools do you use?<br><input type="checkbox" data-choices-questionid="3" data-choices-choiceid="7"><span>Visual Studio</span><br><input type="checkbox" data-choices-questionid="3" data-choices-choiceid="8"><span>Web Matrix</span><br><input type="checkbox" data-choices-questionid="3" data-choices-choiceid="9"><span>Expression Web</span></div>"} 

然后错误:

{"After parsing a value an unexpected character was encountered: 1. Path 'container', line 1, position 105."} 

任何想法问题在哪里?

的Javascript SubmitData

function SubmitData(event) { 
     var data = ''; 
     for (var i = 0; i < storage.length; i++) { 
     var key = storage.key(i); 
     var value = storage[key]; 
     var pair = '"' + key + '":"' + value + '"'; 
     data = data + pair + ","; 
     } 
     if (data.charAt(data.length - 1) == ',') { 
     data = data.substring(0, data.length - 1) 
     } 
     data = '{' + data + '}'; 
     $.ajax({ 
     type: "POST", 
     url: "/Home/SaveResults", 
     contentType: "application/json; charset=utf-8", 
     data: data, 
     dataType: "json", 
     success: function(results){ 
      alert('Results saved!'); 
      window.localStorage.clear(); 
     }, 
     error: function (err) { 
      alert(err.status + " - " + err.statusText); 
     } 
     }) 
    } 

回答

0

看一看你的JSON数据:

"container":"<div data-questions-questionid="1 

属性 '容器' 的值 '1' 所以,是的..这是一个编码前右结束即使我不知道是否还有其他问题。