微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用函数参数序列化对象的JSON

我有这个C#对象:
var obj = new {
    username = "andrey",callback = "function(self) { return function() {self.doSomething()} (this) }"
}

我需要将JSON序列化到ajax调用中传递给浏览器.我使用JavascriptSerializer,但它序列化到以下JSON:

{"username":"andrey","callback": "function(self) { return function() {self.doSomething()} (this) }"}

但我需要的是:

{"username":"andrey","callback": function(self) { return function() {self.doSomething()} (this) }}

>没有引用函数定义.

现在,当JSON对象到达浏览器并被创建时,’callback’参数不是一个函数,而是一个字符串.任何想法如何解决它,最好在服务器端?

解决方法

这种行为是故意的. JSON不应该包括任何不是数据的东西 – 在你的情况下是可执行的功能.如果数据可以从JSON格式的服务器返回,浏览器将会面临巨大的安全隐患,在执行时,它将运行任意功能(可以窃取信息,将用户重定向到恶意站点等)

JSON的早期实现依赖于返回的数据可以通过eval()简单地执行以返回一个对象.但是,人们几乎立即意识到这样会带来巨大的安全隐患,并且一直在试图处理它.这就是为什么在标准JSON对象之前,人们将原始JSON数据放在eval()中,而是使用JSON解析库.

JSON对象将始终将对象序列化为数据.这是设计.标准化的JSON格式无法表示可执行的功能.

现在,您可以通过将其传递给eval(),轻松地将浏览器中的回调转换为函数.但是,不要这样做.你只是打开自己的黑客.

在服务器端,现代浏览器旨在防止这种确切的事情发生 – 即从包含可执行功能的浏览器发送的数据.

原文地址:https://www.jb51.cc/csharp/92007.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐