加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 循环引用和ScriptIgnore问题

发布时间:2020-12-15 21:30:51 所属栏目:百科 来源:网络整理
导读:我有几个相互引用的BusinessObject类,我需要在JsonResponse中序列化一个并将其返回到我的视图中.我一直得到循环引用异常,我无法摆脱它.我已将[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类型,获取我需要的属性.这应该工作

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读