"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);
}
我们需要序列化对象而不是直接发送模型对象。
谢谢。
我正在尝试 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);
}
我们需要序列化对象而不是直接发送模型对象。
谢谢。