C# 处理$.parseJSON中的特殊字符

C# 处理$.parseJSON中的特殊字符,c#,jquery,asp.net,json,C#,Jquery,Asp.net,Json,net应用程序我从数据库中获取一个值字典,并将它们从代码传递到脚本。我在脚本中将这些值作为 var dictionary = $.parseJSON('<%=DictionaryJson %>'); 当应用程序运行并获取DictionaryJson值时,如下所示 var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}'); 传递到DictionaryJson的数据已经被解析,但我使

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

var dictionary = $.parseJSON('<%=DictionaryJson %>');
当应用程序运行并获取DictionaryJson值时,如下所示

var dictionary = $.parseJSON('{"Name1":"Description1","Name2":"Description2"}');
传递到DictionaryJson的数据已经被解析,但我使用的是另一条语句`

var data = eval(DictionaryJson);
如果我不使用$.parseJSON并使用以下代码

var dictionary ='<%=DictionaryJson %>';
 var data = eval(DictionaryJson);
var字典=”;
var data=eval(DictionaryJson);
然后eval抛出一个错误,说缺少“;”


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

我通常使用以下方法

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());
}
这为您提供了对C#JavaScript传输的强类型控制

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

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
        }
    }
});
DoSomething(window.MyVar);
DoAnotherThing(window.ComplexObject.Property);