Как правильно вернуть вложенные данные «один ко многим» в ASP.NET CORE MVC? - PullRequest
1 голос
/ 25 июня 2019

У меня есть таблица MinionLeaders с отношением один ко многим с таблицей Minions.Миньон может вести n-миньонов или сам, если у него нет члена.

Проблема в том, что когда я пытался получить список лидеров миньонов с его членами как json, он возвращает неорганизованный-незаконченный json:

[
    {
        "LeaderID":"ABCD000000000001",
        "Name":"Foo",
        "Members":
this>>>>>>  [
                {
                    "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:

 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; }
    }

1 Ответ

2 голосов
/ 25 июня 2019

Я обнаружил, что это была проблема с сериализатором. Я решил это, установив в настройках сериализатора игнорирование ссылок на циклы в Startup.cs

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

Но я не уверен, является ли это реальным решением или просто обходным путем.

...