1

我写了一个.ToJson()这样的扩展方法:

public static string ToJson(this object obj)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    return serializer.Serialize(obj);
}

这让我可以做一些事情,比如让一个 JSON 字符串通过我的Web 服务myObject.ToJson()发送回我的应用程序。.asmx这一切都很好。

出现了一个问题,我正在构建一个需要将大量异步数据传输到该页面的页面,并且我开始达到超过 100k 的数据有效负载。在查看 JSON 时,我注意到它对我发回的任何内容进行编码,这增加了很多额外的字符。由于此应用程序是面向极少数受众的管理工具,因此我并不十分担心这种安全性,但我似乎无法在这里找到如何控制编码。

这是我收到的(示例):

{"d":"[{\"OrderId\":1308,\"Approved\":true,
\"Status\":\"\\u003cimg class=\\\"statusicon\\\" src=\\\"/images/ ...

当我应该得到类似的东西时:

{"d": [{"OrderId":1308,"Approved":true,"Status":"<img class=\"statusicon\"
src=\"/images/ ...

有什么方法可以控制 JSON 数据是否被转义?

需要注意的一件事是,我被迫在我的文件中使用它.ajaxSetup()来解析返回的数据:

dataFilter: function (data) {
    if (data) {
        var msg;
        if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') {
            msg = JSON.parse(data);
        } else {
            msg = eval('(' + data + ')');
        }
        if (msg.hasOwnProperty('d')) {
            return msg.d;
        } else {
            return msg;
        }
    }
}
4

1 回答 1

0

我有这个问题。json 库不返回转义文本。我相信 javascript 本身将其解释为已转义。

<script type="text/javascript">
     $(document).ready(function () {
          var columnNumber = 1;
          var databaseTypes = <%= Html.Raw(ViewBag.DatabaseTypes) %>;

看看 Viewbag 区域。这是在 asp.net mvc 视图中注入文本的方法。

于 2013-08-10T22:33:23.213 回答