返回带撇号的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的新手,所以我不知道如何解决这个问题。有没有办法摆脱所有的撇号?或者我还有别的事情要做。

如果我说的不清楚,请告诉我。谢谢

返回带撇号的JsonResult

多亏了用户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