JSON中的意外令牌

本文关键字:令牌 意外 JSON | 更新日期: 2023-09-27 18:13:55

我检查了at的JSON字符串响应https://jsonformatter.curiousconcept.com/并且它说JSON字符串是有效的

下面是我用来将数据序列化为JSON字符串的函数:

private string getJSONData()
{
    obj_userSession = new UserSession();
    DataTable dtRender = null;
    DataView dvRender = null;
    obj_userSession = new UserSession();
    if (obj_userSession.LoginData != null && obj_userSession.EmailsDetails != null)
    {
        dvRender = new DataView(obj_userSession.EmailsDetails);
        dtRender = dvRender.ToTable("EmailsDetails", false, "MessageDate", "SentFrom", "MessageBody", "SentTo", "MLSNumber");
        return JsonConvert.SerializeObject(dtRender);
    }
    return "";
}

下面是上面函数作为JSON字符串的响应:

[
    {
        "MessageDate": "2016-04-04T05:42:38.273",
        "SentFrom": "Site Team",
        "MessageBody": "<html>'r'n<head>'r'n't<style type='"text/css'">'r'n't't.c0 { font-family:'Arial';font-size:10.5pt; }'r'n't't.c1 { margin-left:0pt;margin-top:0pt;margin-right:0pt;margin-bottom:7.5pt; }'r'n't</style>'r'n</head>'r'n<body class='"c0'">'r'n<p class='"c1'">Hi Joe, </p>'r'n<p class='"c1'">Testing Site</p>'r'n<p class='"c1'">--James</p>'r'n<p class='"c1'"></p>'r'n</body>'r'n</html>'r'n",
        "SentTo": "James",
        "Number": ""
    }
]

我们没有得到任何错误的代码,但结果没有显示在浏览器中。并得到上述的错误在浏览器的开发工具。

如果我从函数getJSONData中删除MessageBody以避免其序列化,并从MessageBody的设计页面中删除绑定代码,则它可以正常工作。

我必须从MessageBody中逃脱什么字符,如何做到这一点?

编辑这是AngularJS控制器函数,我用它来获取数据:

$scope.browseListing = function (strURL) {
    $scope.getURL(strURL);
    $http.post($scope.URL)
            .then(function (response) {
                $scope.Data = response.data;
                if ($scope.IsMap)
                    $scope.LoadMapData();
                if ($scope.IsDetails)
                    $scope.buildReportURL($scope.Data[0].ListingID);
            }, function (response) {
                $log.info(response);
            });
};

这是html的绑定:

<tr ng-repeat="listing in Data">
    <td colspan="6">
        <table class="tblListingOuter">
            <tr>
                <th style="width:20%;">
                </th>
                <th style="width:80%;">
                </th>
            </tr>
            <tr>
                <td><b>Date: </b>{{ listing.MessageDate }}</td>
                <td><b>Message: </b></td>
            </tr>
            <tr>
                <td><b>Sent By: </b>{{ listing.SentFrom }}</td>
                <td rowspan="3">
                    <pre contenteditable="true" ng-bind-html="listing.MessageBody | unsafe"></pre>
                </td>
            </tr>
            <tr>
                <td><b>Sent To: </b>{{ listing.SentTo }}</td>
            </tr>
            <tr>
                <td><b>MLSNO: </b>{{ listing.MLSNumber }}</td>
            </tr>
        </table>
    </td>
</tr>

JSON中的意外令牌

在Newtonsoft JsonSerializerSettings中,您有属性StringEscapeHandling,该属性指定在编写json时如何转义字符串。下面的代码可能对你有用

var settings = new JsonSerializerSettings();
settings.StringEscapeHandling = StringEscapeHandling.EscapeHtml;
return JsonConvert.SerializeObject(dtRender, settings)

此属性的可接受值在文档中列出:http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_StringEscapeHandling.htm

你可以尝试其他标志来让它工作

这只是一个猜测,但您可以尝试对MessageBody中的转义字符进行双转义,如下所示:

[
    {
        "MessageDate": "2016-04-04T05:42:38.273",
        "SentFrom": "Site Team",
        "MessageBody": "<html>''r''n<head>''r''n''t<style type=''"text/css''">''r''n''t''t.c0 { font-family:'Arial';font-size:10.5pt; }''r''n''t''t.c1 { margin-left:0pt;margin-top:0pt;margin-right:0pt;margin-bottom:7.5pt; }''r''n''t</style>''r''n</head>''r''n<body class=''"c0''">''r''n<p class=''"c1'"'>Hi Joe, </p>''r''n<p class=''"c1''">Testing Site</p>''r''n<p class=''"c1''">--James</p>''r''n<p class=''"c1''"></p>''r''n</body>''r''n</html>''r''n",
        "SentTo": "James",
        "Number": ""
    }
]