删除特殊字符后,eval“使用JavaScriptSerializer()的序列化对象”

时间:2010-05-27 16:03:15

标签: jquery json eval javascriptserializer

我需要评估一个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的值?

1 个答案:

答案 0 :(得分:0)

我认为你可以简单地删除第一个字符串中的单引号而不使用eval(userSettings已经是一个对象)。

另一种方法是加倍反斜杠,这样你的字符串就会被引用,就像这样(未经测试):

var userSettings = '<%= System.Text.RegularExpressions.Regex.Replace(
    new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["UserSettings"]), @"\134", "\\$0"); %>';