处理$. parsejson中的特殊字符

本文关键字:特殊字符 parsejson 处理 | 更新日期: 2023-09-27 18:02:32

. net应用程序我从数据库中获取值的字典,并将它们从代码传递到脚本。我在脚本中访问这些值为

var dictionary = $.parseJSON('<%=DictionaryJson %>');

这里DictionaryJson是从asp.net传入的,像这样传入

public string DictionaryJson 
        {
            get
            {
                //i'm getting dictionary information into Dictionaryinformation then
                JavaScriptSerializer jSer = new JavaScriptSerializer();
                return jSer.Serialize(Dictionaryinformation);
            }
        }

,当应用程序运行并获取DictionaryJson值时,如下所示

var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}');

传入DictionaryJson的数据已经被解析,但我正在使用另一个语句'

var data = eval(DictionaryJson);

如果我不使用$。并使用以下代码

var dictionary ='<%=DictionaryJson %>';
 var data = eval(DictionaryJson);

则eval抛出一个错误,说缺少';'

但是如果我使用$。当Name1,Name2,Description1,Description2中的任何一个包含任何特殊字符,如单引号(')或反斜杠()时,该语句抛出错误。这是抛出错误。我想解决这个特殊字符的情况,但我仍然希望它们在文本中存在,因为它们是一部分,比如Name1可能像Id/Number。

处理$. parsejson中的特殊字符

我通常使用以下方法

public static MvcHtmlString WriteVariables(this HtmlHelper helper, Dictionary<String, Object> values, Boolean writeVar = true) {
    var sb = new StringBuilder("<script type='"text/javascript'">//<![CDATA['r'n");
    var seriazlier = new JavaScriptSerializer();
    if (writeVar)
        sb.Append("var ");
    for (var i = 0; i < values.Count; i++) {
        var key = values.Keys.ElementAt(i);
        sb.Append(key).Append("=");
        var currentVal = seriazlier.Serialize(values[key]);
        sb.Append(currentVal).Append(i < values.Count - 1 ? "," : ";");
    }
    sb.Append("//]]></script>");
    return MvcHtmlString.Create(sb.ToString());
}

,并按如下方式使用

@WriteVariable(new Dictionary<String, Object>{
    {"MyVar", "SomeStr"},
    {
        "ComplexObject", new {
            Property = true
        }
    }
});

在JavaScript中我可以这样使用

DoSomething(window.MyVar);
DoAnotherThing(window.ComplexObject.Property);

这给了你对c# <=> JavaScript传输的强类型控制。

目前我正在使用Razor,但它完全适用于ASPX视图引擎