返回带撇号的JsonResult
本文关键字:JsonResult 返回 | 更新日期: 2023-09-27 18:24:22
据我所知,我收到了一个语法分析器错误,因为我返回的一些数据包含撇号。
我得到的错误:
SyntaxError:jQuery.parseJSON…中Object.parse(本机)的输入意外结束
我的javascript:
var viewModel = kendo.observable({
hospitalDataSource: new kendo.data.DataSource({
transport: {
read: {
url: "/Hospital/GetHospitals",
dataType: "json",
type: "GET"
},
schema: {
model: {
id: "Id",
fields: {
ProviderId: { type: "number" },
Name: { type: "string" },
Active: { type: "string" }
}
}
},
errors: "errorMsg"
},
pageSize: 10,
error: function (e) {
toastr.options = {
"positionClass": "toast-bottom-full-width"
};
toastr.error('There was an error:' + e.errors, 'Uh Oh!');
this.cancelChanges();
},
serverPaging: false,
serverFiltering: false,
serverSorting: false
}),
})
控制器Json结果:
[HttpGet]
public JsonResult GetHospitals()
{
var hospitals = hospitalService.GetAllHospitals();
return Json(hospitals, JsonRequestBehavior.AllowGet);
}
正如我上面提到的,我相信我得到了解析器错误,因为我的一些数据包含撇号。例如,Name
可能包括字符串Women and Children's Hospital
我还是MVC/C#和Json的新手,所以我不知道如何解决这个问题。有没有办法摆脱所有的撇号?或者我还有别的事情要做。
如果我说的不清楚,请告诉我。谢谢
多亏了用户poke,我才得以解决这个问题。结果并不是撇号的问题,而是我试图返回的JSON结果比MVC中默认设置的最大值长。
我可以用这个答案来解决我的问题:我可以在web.config中为maxJsonLength设置无限长度吗?
您需要首先使用str.Replace("'", "'''")
来转义这些撇号。用"''"
替换"'"
的出现
我不认为这个问题与撇号有关,因为json序列化程序应该在需要时对它们进行转义。无论如何,为了替换它们,最好在序列化对象的集合之前先进行替换。
[HttpGet]
public JsonResult GetHospitals()
{
var hospitals = hospitalService.GetAllHospitals();
// Replaces the apostrophes from the hospital name
foreach(var hospital in hospitals) {
hospital.Name = hospital.Name.Replace("'", "");
}
return Json(hospitals, JsonRequestBehavior.AllowGet);
}
通过这种方式,JSON将在名称中不带aphostrophs的情况下返回。
您可以尝试对撇号使用html编码,这应该会将它们转换为'
通常,这是JSON.parse()
调用或任何依赖它的函数的问题,因为它不会转义撇号或引号。不过,HTML实体应该没问题。
如果你习惯于使用eval()
来解析JSON,你不会看到它。但你真的应该使用JSON解析器,原因如下:
http://www.json.org/js.html
这里介绍了Microsoft的HTML编码的ASP.NET实现。
https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx