如何使JsonConvert.SerializeObject实现JavaScriptSerializer的特殊字符转义效果?
让JsonConvert.SerializeObject实现与JavaScriptSerializer相同的特殊字符转义效果
要实现两者一致的转义效果,你需要通过JsonSerializerSettings配置Json.NET的字符串转义规则,具体操作如下:
配置序列化参数
设置StringEscapeHandling为StringEscapeHandling.EscapeHtml,这个选项会让Json.NET将HTML特殊字符转义为对应的Unicode编码(而非默认的HTML实体),和JavaScriptSerializer的行为对齐。代码示例
// 定义待序列化的对象 var data = new { Description = "To test escaping:\r\n<script>alert('sdfg');</script>" }; // 配置Json.NET序列化设置 var settings = new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml }; // 执行序列化(带格式化输出) string json = JsonConvert.SerializeObject(data, Formatting.Indented, settings);最终序列化结果
执行后得到的JSON会和JavaScriptSerializer的输出完全一致:{ "Description": "To test escaping:\r\n\u003cscript\u003ealert(\u0027sdfg\u0027);\u003c/script\u003e" }
原理说明
JavaScriptSerializer默认将HTML特殊字符(如<、>)转义为Unicode编码(<→\u003c),而Json.NET默认会将这些字符转义为HTML实体(<→<)。通过设置StringEscapeHandling.EscapeHtml,可以强制Json.NET采用Unicode转义的方式,从而和JavaScriptSerializer的输出完全匹配。
内容的提问来源于stack exchange,提问作者Brobic Vripiat
相关产品推荐
相关产品推荐

