使用
序列化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并使用序列化器