c# – 循环引用和ScriptIgnore问题
作者:互联网
我有几个相互引用的BusinessObject类,我需要在JsonResponse中序列化一个并将其返回到我的视图中.我一直得到循环引用异常,我无法摆脱它.我已将[ScriptIgnore()]装饰器放在每个不是简单数据类型属性的属性上,我仍然得到异常.我无法弄清楚问题出在哪里,因为我阻止了序列化器几乎所有的东西,它仍然在炸毁我.
有没有办法看到它们当前状态的序列化对象是什么?
[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瘦,只推送我需要的数据(当然,避免循环引用异常)
看看你的样本,我会从SearchAnalysis中选择新的anonymouse类型,获取我需要的属性.这应该工作
标签:json,c,serialization,asp-net-mvc-3,circular-reference 来源: https://codeday.me/bug/20190709/1416552.html