c# - 当 EF 有一个实体拥有一个与自身类似的导航属性时,它不会给出完整的 json
问题描述
我在 asp.net core 中有一个项目,在这个项目中,我有两个实体。第一个实体是产品
public class Product
{
public int id { get; set;}
public string Name { get; set; }
public virtual Brand Brand { get; set; }
}
我的第二节课是
public class Brand
{
public Brand()
{
Products = new List<Products>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Product> Products { get; set; }
}
我有一个这样的 APIController
public class APIController : ControllerBase
{
public object GetProducts()
{
return decorDB.Products
.Include(p => p.Brand);
}
}
我得到的是这样的json
[
{
"id":1,
"name":"iPhone",
"brand":
{
"id":1,
"name":"Apple",
"products":[
如您所见,它并不完整,我认为 EF 会破坏它以防止循环。我想要这样的东西
[
{
"id":1,
"name":"iPhone",
"brand":
{
"id":1,
"name":"Apple",
"products":[]
}
}
]
我不知道要做什么!
解决方案
免责声明:未经测试,但渴望发表评论。
我建议进行以下更改:
首先尝试更改您的操作结果签名:
public IEnumerable<Product> GetProducts()
下一步:尝试在您的启动中明确禁用往返:
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
推荐阅读
- stm32 - STM32 SAI:了解FIFO
- bash - 为什么当通过管道传输到其他命令时 docker 伪 tty 会破坏输出?
- dart - 如何在文本下添加按钮
- excel - ALV 网格仅加载前 64 行,如何更改默认加载
- google-maps - Clojurescript - 无法限制到 Google Places Autocomplete API 中的城市
- machine-learning - 如何训练用于提取值的对话流可能不会被空间分割
- azure - 此版本的 SQL Server 不支持“CREATE CREDENTIAL”
- java - 在java流中使用return语句
- java - Intellij 不询问 Git 凭据,但在身份验证期间失败
- javascript - 如何在 React.js 中使用 componentWillUnmount 删除 setInterval