循环引用和ScriptIgnore问题

我有几个相互引用的BusinessObject类,我需要在JsonResponse中序列化一个并将其返回到我的视图中。 我一直得到循环引用exception,我无法摆脱它。 我已将[ScriptIgnore()]装饰器放在每个不是简单数据类型属性的属性上,但我仍然得到exception。 我无法弄清楚问题出在哪里,因为我阻止了序列化器几乎所有的东西,它仍然在炸毁我。

有没有办法看到它们当前状态的序列化对象是什么?

  [HttpPost] public JsonResult GetAnalysisInfo(int id) { ProjectContext myDB = db; SearchAnalysis searchanalysis = SearchAnalysis.Find(myDB, id); //searchanalysis.Results = searchanalysis.SearchResultsPrototype(myDB); return this.Json(searchanalysis); } 

更新

我也试过实现ISerializable无济于事。 我的GetObjectData非常简单:

  public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("SearchAnalysisId", this.SearchAnalysisId); info.AddValue("Created", this.Created); } 

仍然收到CircularRefernce错误。 DateTime数据类型不会导致序列化问题吗?

我正在做的是防止该错误是返回反映我的对象的属性的anonymouse类型,如下所示:

  public JsonResult CompanyListJson() { var list = (from companies in appContext.Companies where companies.Active.Equals(true) select new { Name = companies.DbName, Id = companies.Id, Active = companies.Id.Equals(CurrentCompany.Id) }); return Json(list, JsonRequestBehavior.AllowGet); } 

也许这不是最好的方式,但它允许我保持我的JSON瘦,只推送我需要的数据(当然,避免循环引用exception)

看看你的样本,我会从SearchAnalysis中选择新的anonymouse类型,获取我需要的属性。 这应该工作