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>
在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": ""
}
]