在ASP上使用JavaScriptSerializer进行Unicode字符转义.. NET MVC依赖于配置



使用

序列化JSON字符串时

JavaScriptSerializer.Serialize(model)

一些Unicode字符,如U+2028(LINE SEPARATOR)在一个环境中被转义,而在另一个环境中没有。

问题是,在本地开发时,该字符在该序列化函数返回的JSON字符串中被转义为u2028,但在另一个环境中,该字符不会被转义破坏JavaScript。浏览器发现这个字符是真实呈现的,它是JavaScript的行结束符,并且是非法的:

Chrome控制台错误:

Uncaught SyntaxError: Unexpected token ILLEGAL

服务器使用IIS 7.5和ASP。NET MVC 4和完全相同的数据被序列化。

什么可能会影响这个JavaScriptSerializer处理这些字符的方式?的. net版本在这两个环境下都是4.0.30319.

我怀疑在开发环境中安装了. net FW 4的更新,而没有安装在服务器上。我无法确切地找到修复这个问题的框架补丁。至少版本4.0.30319发布,似乎仍然有这个问题。

。NET 4.5.1(你可以在参考源代码中查看)修复了这个问题。

我们找到的解决方案是迁移到Newtonsoft JSON并使用序列化器

最新更新