"A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'"

"A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'"

我正在尝试 return JSON 中 MVC 模型的对象使用 jQuery 结果。我收到一条失败消息:

A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'

这是我的控制器,我在其中返回 Json 结果

public ActionResult populateData(string application, string columns, string machine, string pages, string startDate, string endDate)
    {

        ErrorPage _objError = new ErrorPage();
        _objError.ErrorData = dbl.GetDataTable(DbConnectionString, Table, whereCondition, columns);


        //Column description: Name and Type    
        var columnlist = new Dictionary<string, System.Type>();
        foreach (System.Data.DataColumn column in _objError.ErrorData.Columns)
        {       
            var t = System.Type.GetType( column.DataType.FullName );
            columnlist.Add(column.ColumnName, t);  
        }

        _objError.ErrorColumns = columnlist;


        //DataSourceRequest result = _objError.ToDataSourceResult(request);

        if (_objError.ErrorData.Rows.Count > 0)
            Message = "Showing Error log for " + AppName + " . To Change the application or filtering options please select the appropriate application from Application Dropdown";
        else
            Message = "No errors found for " + AppName + " in last 24 hours.";


        return Json(_objError);
    }

这里我要 Ajax 调用 Controller 方法:

$.ajax({
        type: "POST",
        url: '@Url.Content("~/Common/PopulateData")',
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        data: JSON.stringify({ application: app, columns: columns, machine: machine, pages: pages, startDate: startDate, endDate: endDate }),
        success: function (data) {
            alert("Success");
        },
        error: function (error) {
            alert('error; ' + eval(error));
            alert('error; ' + error.responseText);
        }
    });

请帮助如何 return 模型 class 对象 Ajax post 调用?

当一个对象的 属性 有一个指向父对象的 属性 时,就会发生循环引用。它会导致无限循环。如果不了解构成 class 错误页面的详细信息,很难告诉您哪个 属性 对此负责。

但是这种事情的典型解决方案是制作一个与您的 class 结构相同的 ViewModel 减去循环引用,或者您可以使用具有一些装饰属性的 https://json.codeplex.com/可以添加以在序列化期间忽略 属性。

错误消息非常明确:您要序列化的对象 (_objError) 有循环引用。这意味着它的一个属性直接或间接地指向它自己的实例。前任。实例 A 有一个 属性 指向实例 B,实例 B 指向实例 A(就像父 属性)。

这会导致序列化失败,因为它会创建一个无限循环 (A.child = B / B.parent = A / A.child = B / ...)。为了解决这个问题,您必须通过忽略导致循环引用的 属性 或创建不具有此类 属性.

的其他对象来打破循环引用

我们开始寻找解决方案

我用下面的一组代码修改了我的代码,它对我有用

public JsonResult populateData(string application, string columns, string machine, string pages, string startDate, string endDate)
    {
        ErrorPage _objError = new ErrorPage();
        var ErrorResult = _objError.GetErrorData(application, columns, machine, pages, startDate, endDate);


        var result = JsonConvert.SerializeObject(ErrorResult.ErrorData, Formatting.Indented,
                       new JsonSerializerSettings
                       {
                           ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                       });

        return Json(result, JsonRequestBehavior.AllowGet);
    }

我们需要序列化对象而不是直接发送模型对象。

谢谢。