簡體   English   中英

如何在 ASP.NET CORE MVC 中正確返回嵌套的一對多數據?

[英]How to properly return nested one-to-many data in ASP.NET CORE MVC?

我有一個MinionLeaders表,Minions表具有一對多的關系。 一個仆從可以領導 n 個仆從,或者如果它沒有任何成員,它也可以領導自己。

問題是,當我嘗試以 json 形式獲取 Minion Leaders 的列表時,它返回一個雜亂無章的未完成的 json :

[
    {
        "LeaderID":"ABCD000000000001",
        "Name":"Foo",
        "Members":
            [
                {
                    "ID":"EEEE000000000001",
                    "Name":"Fubar",
                    "LeaderID":"ABCD000000000001"

此外,服務器拋出錯誤:

Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'minionLeader' with type 'rt5_app.Models.MinionLeaders'. Path '[0].Members[0]'.

如何正確返回數據?


這是我從數據庫MinionLeadersRepository.cs獲取數據的MinionLeadersRepository.cs

 public async Task<IEnumerable<MinionLeaders>> ListAsync()
        {
            return await context.MinionLeaders.Include(p => p.Members)
                                              .ToListAsync();
        }

ApiController.cs :

public async Task<IEnumerable<MinionLeaders>> ListAsync()
        {
            return await _minionLeaders.ListAsync();
        }

MinionLeadersModel.cs

public class MinionLeaders
    {
        [Key]
        [MinLength(16)]
        [MaxLength(16)]
        public string LeaderID { get; set; }
        
        [MinLength(16)]
        [MaxLength(16)]
        public string Name { get; set; }

        public virtual List<Minion> Members { get; set; }
    }

我發現這是一個序列化器問題。 我通過將序列化程序設置設置為忽略Startup.cs循環引用來解決它

services.AddMvc()
        .AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

但我不確定這是真正的解決方案還是只是一種解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM