使用
序列化 JSON 字符串时JavaScriptSerializer.Serialize(模型)
某些 Unicode 字符(如 U+2028(行分隔符))在一种环境中会被转义,而在另一种环境中则不会。
问题是,在本地开发时,该字符在该序列化函数返回的 JSON 字符串中被转义为\u2028,但在另一个环境中,该字符不会被转义,从而破坏 JavaScript。浏览器发现这个字符真正呈现,它是 JavaScript 的行终止符,是 illegal :
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,您可以在 reference source 中查看已修复此问题。
我们找到的解决方案是迁移到 Newtonsoft JSON 并使用该序列化程序。
关于javascript - ASP.NET MVC 上使用 JavaScriptSerializer 进行 Unicode 字符转义取决于配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175062/