c# - 序列化“System.Data.Entity.DynamicProxies.Item”类型的对象时检测到循环引用
问题描述
我正在尝试做一个简单的 JSON 返回,但我遇到了以下问题。
[HttpGet]
public JsonResult GetItemsEdit()
{
try
{
var data = _unitOfWork.Items.GetItems();
return Json(new
{
data
}, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(ex.Message);
}
}
这是我的ajax调用代码:
// Gets Items on Dropdown
$.ajax({
type: "GET",
url: "/Payments/GetItemsEdit",
datatype: "application/json",
success: function (data) {
debugger
alert("ok");
$.each(data, function (index, value) {
$('#Item').append('<option value="' + value.Id + '">' + value.itemName + '</option>');
});
},
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
});
我得到了一个 HTTP 500 异常,如本问题的标题所示。
这是一个错误还是我的实现?
解决方案
不,这不是错误,实际上问题不在于您的实现。问题是返回模型的结构。
您可以将您的模型转换为不同的模型而无需手动参考,例如。
var data = _unitOfWork.Items.GetItems().Select(x => new { ... });
或者根据您使用的 json 序列化程序,您可以打开忽略循环引用。
Newtonsoft.json 的示例
services
.AddMvc()
.AddJsonOptions(jsonOptions => { jsonOptions.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; } );
System.Text.Json库的更多见解。
推荐阅读
- django - 未提供 Django 管理员身份验证凭据 - HTTP 401
- php - PHP Ajax Update MySQL Data Through Bootstrap Modal
- css - Dynamically changing font, font-size, font-color, and so on in Vaadin Flow web apps
- java - 如何解决 OutOfMemoryError:Java 堆空间
- jekyll - Jekyllrb /assets/images 目录?
- google-app-engine - Google App Engine CLI - 列出项目目录
- android - 从 Unity 模块返回后 Android 应用程序被杀死
- java - org.openqa.selenium.firefox.FirefoxDriver 类型不可访问
- firebase - 我可以进行从 firestore 读取但在实时数据库上写入的 firestore 事务吗?
- linux - 代码持有信号量可以被抢占是什么意思