序列化JSON字符串时
JavaScriptSerializer.Serialize(model)
一些Unicode字符(如U+2028(行分隔符))在一个环境中被转义,而在另一个环境上则没有转义。
问题是,在本地开发时,这个字符在序列化函数返回的JSON字符串中被转义到\u 2028,但是在另一个环境中,这个字符在破坏JavaScript时不会被转义。浏览器发现真正呈现的字符是JavaScript的行终止符,并且是非法:
Chrome控制台错误:
未登录的SyntaxError:意外令牌非法
服务器使用IIS7.5和ASP.NET MVC 4,并对完全相同的数据进行序列化。
是什么影响了这个JavaScriptSerializer处理这些字符的方式?这两个环境的.NET版本为4.0.30319。
发布于 2014-10-24 15:57:15
我怀疑在开发环境中安装了.NET FW 4的更新,而服务器上没有安装它。我不知道这个问题是用什么补丁解决的。至少4.0.30319版像贴的一样,似乎还有这个问题。
.NET 4.5.1因为您可以在参考源中签入,所以这个问题是固定的。
我们找到的解决方案是迁移到Newtonsoft JSON并使用该序列化程序。
https://stackoverflow.com/questions/24175062
复制相似问题