将实体框架数据转换为 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,这可能会使此循环(。
为什么如果出现问题就没有错误? :/
我不知道
它是否仍然相关,但我遇到了同样的问题,它对我有用 配置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(;'