0

我需要评估一个 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 之前删除序列化中的特殊字符?

或者我如何SalesTaxPercentage从序列化对象中获取值?

4

1 回答 1

0

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

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

var userSettings = '<%= System.Text.RegularExpressions.Regex.Replace(
    new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ViewData["UserSettings"]), @"\134", "\\$0"); %>';
于 2010-05-27T16:45:58.343 回答