Как я могу правильно вернуть результат json, который включает в себя две или более таблиц?
Я хотел бы вернуть данные json из моего контроллера, но получаю ошибку: "при сериализации объекта типа была обнаружена циклическая ссылка".
До сих пор я могу возвращать данные только из одной таблицы под названием "проекты", но когда я пытаюсь включить свою поисковую таблицу "ProjectTypes", я получаю циклическую ссылку. если есть способ вернуть данные проектов и их правильный тип проекта, пожалуйста, любезно помогите мне.
Что я уже пробовал:
Это то, что я пытался, но .Include действительно работает с return json.
public JsonResult getProjects() { bool proxyCreation = dc.Configuration.ProxyCreationEnabled; try { //set ProxyCreation to false dc.Configuration.ProxyCreationEnabled = false; var projects = dc.Projects.Include(p => p.ProjectType); return Json(projects.ToList(), "application/json", System.Text.Encoding.UTF8, JsonRequestBehavior.AllowGet); } catch (Exception ex) { Response.StatusCode = (int)HttpStatusCode.BadRequest; return Json(ex.Message); } finally { //restore ProxyCreation to its original state dc.Configuration.ProxyCreationEnabled = proxyCreation; } }
Ниже приведены мои два класса
public partial class Project { public int ProjectID { get; set; } public string Description { get; set; } public System.DateTime StartDate { get; set; } public Nullable<System.DateTime> EndDate { get; set; } public System.DateTime ProjectedEndDate { get; set; } public int ProjectTypeID { get; set; } public virtual ProjectType ProjectType { get; set; } } public partial class ProjectType { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public ProjectType() { this.Projects = new HashSet<Project>(); } public int ProjectTypeID { get; set; } public string Description { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection<Project> Projects { get; set; } }
Richard MacCutchan
Сообщение об ошибке говорит вам, что objecta содержит ссылку на objectb, которая содержит ссылку обратно на objecta. Поэтому попытка сериализовать это приведет к бесконечному циклу.