将实体框架数据转换为 JSON 时出现 502 错误.可能的递归.如何预防它

本文关键字:错误 递归 何预防 数据 框架 实体 转换 JSON | 更新日期: 2023-09-27 18:28:28

[HttpGet("/api/notes/suggested")]
    public JsonResult GetSuggestedNotes(string searchText)
    {
        //TODO: Podpowiedzi przy wpisywaniu tytułu
        JsonResult result = null;
        try {
            List<Note> n = db.Notes.Include(x => x.NoteTags).ToList();
            result = Json(n);
        }
        catch(Exception e)
        {
            Console.WriteLine(e);
        }
        return result;
    }
public class Note
    {
        public Note()
        {
            CreationDate = DateTime.Now;
            NoteTags = new HashSet<NoteTag>();
            Parts = new HashSet<Part>();
        }
        public int ID { get; set; }
        public virtual ICollection<NoteTag> NoteTags { get; set; }
        public virtual ICollection<Part> Parts { get; set; }
        public DateTime? CreationDate { get; set; }
        [NotMapped]
        public string TagsToAdd { get; set; }
        [NotMapped]
        public string TagsAsSingleString {
            get
            {
                string result = "";
                foreach(var nt in NoteTags)
                {
                    result += nt.Tag.Name + " ";
                }
                return result;
            }
        }
    }
public class NoteTag
    {
        public int NoteId { get; set; }
        public virtual Note Note { get; set; }
        public int TagId { get; set; }
        public virtual Tag Tag { get; set; }
    }

当我尝试使用此 WebAPI 控制器获取数据时,我得到 502 错误的网关。没有错误,调试服务器时一切都很好。数据正确从数据库获取。

我怀疑它可能类似于"无限循环",但如何防止它?(注意类连接到 NoteTag 对象的集合,这些对象连接回 Note,这可能会使此循环(。

为什么如果出现问题就没有错误? :/

将实体框架数据转换为 JSON 时出现 502 错误.可能的递归.如何预防它

我不知道

它是否仍然相关,但我遇到了同样的问题,它对我有用 配置Newtonsoft.json SerializerSettings.ReferenceLoopHandling = ewtonsoft.Json.ReferenceLoopHandling.Ignore.

如果您使用的是VS2015 MVC,则可以添加以下代码: 服务业。AddMvc((.AddJsonOptions(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore(;

Startup 类中的 ConfigureServices 方法中。

我认为问题是递归,你能尝试使用匿名类型吗NoteTags有Note,想象一下,如果

Note->NoteTags->Note->NoteTags->Note->NoteTags ...

'列表 n = db。Notes.Include(x => x.NoteTags(.ToList((;

var e = n.select(x=> new {property=value}(;

result = Json(e(;'