我需要评估一个JavaScriptSerializer()对象。
var userSettings = '<%= new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["UserSettings"]) %>';
以上行的输出为:
{"SalesTaxPercentage":7.75,"StartOfWeek":"SUNDAY","NoofRowsInList":10,"ShowDashboardEntry":5,"DisplayContactsFormat":"LastName, FirstName","FooterNotes":""When you look good, you feel good...when you feel good, your attitude changes...and attitude is everything!"
You are the heart of my business....THANK YOU!"}
当我使用eval作为序列化内容时:
userSettings = eval("(" + userSettings + ")");
它会抛出错误:
缺少}属性列表
之后
这是因为在eval期间序列化对象中的特殊字符(在FooterNotes中带有“以及开头和结尾引号之间的一些其他字符”)。
如何在eval之前删除序列化中的特殊字符?
或者如何从searialized对象中获取SalesTaxPercentage
的值?
答案 0 :(得分:0)
我认为你可以简单地删除第一个字符串中的单引号而不使用eval(userSettings
已经是一个对象)。
另一种方法是加倍反斜杠,这样你的字符串就会被引用,就像这样(未经测试):
var userSettings = '<%= System.Text.RegularExpressions.Regex.Replace(
new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["UserSettings"]), @"\134", "\\$0"); %>';