首页 > 解决方案 > 如何在 Asp .Net Core 中设置序列化

问题描述

在我的第一个 ajax 调用中,我的 Ajax 回传 {"readyState":0,"status":0,"statusText":"error"} 出现以下错误,但第二个返回我想要的数据。我的 C# 方法 (UserSelect) JsonResults 在我放置断点时显示数据

我的 C# 代码:

   public IActionResult OnPostAreaSelect(string Id)
    {
        //Generating list for Areas
        Guid ModelId = new Guid(Id);
        List<ModelArea> modelAreas = _context.ModelArea.Distinct()
            .Where(w => w.ModelId == ModelId).OrderBy(o => o.AreaColumn.Name).Include(i => i.AreaColumn).ToList();

       return new JsonResult(modelAreas);
    }

    public IActionResult OnPostUserSelect(string Id)
    {
        //Generating list for Users   
        Guid ModelId = new Guid(Id);

        List<UserModel> userModels = _context.UserModel
            .Where(w => w.ModelId == ModelId).OrderBy(o => o.User.FullName)
            .Include(i => i.User)
            .ToList();


        return new JsonResult(userModels);
    }

我的 JavaScript :

<script type="text/javascript">
$(document).ready(function () {

    $("#RepfocusModelDropdown").change(function () {
        var Id = $(this).val();
        if (Id != null) {
            $.ajax({                   
                async: true,
                type: "POST",
                url: "./Create?handler=UserSelect",
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("XSRF-TOKEN",
                        $('input:hidden[name="__RequestVerificationToken"]').val());
                },
                data: {
                    Id: Id
                },
                crossDomain: true,
                dataType: "json",
                success: function (response) {
                     alert(JSON.stringify(response));

                },
                error: function (response) {
                    alert(JSON.stringify(response));
                }

            });

            $.ajax({
                type: "POST",
                url: "./Create?handler=AreaSelect",
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("XSRF-TOKEN",
                        $('input:hidden[name="__RequestVerificationToken"]').val());
                },
                data: {
                    Id: Id
                },
                dataType: "json",
                success: function (response) {
                    alert(JSON.stringify(response));

                },
                error: function (response) {
                    alert(JSON.stringify(response));
                }

            });

        }


    })
})

我的脚本上的第二个 ajax 调用工作正常,只有第一个返回错误我该如何解决这个错误

标签: javascriptc#asp.net

解决方案


当您使用EntityFramework(或其他 ORM)时,序列化可能会出现问题,因为实体可能有一些循环引用。为避免此问题,解决方案是设置序列化设置:

services.AddMvc().AddJsonOptions(opt => {
    opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});

或者:

Newtonsoft.Json.JsonConvert.DefaultSettings = () => new Newtonsoft.Json.JsonSerializerSettings {
    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
};

推荐阅读