【问题标题】:ICollection circular referenceICollection 循环引用
【发布时间】:2015-04-27 01:21:06
【问题描述】:

我有一个这样的 LINQ 查询

var Data = from a in db.Medlem
                   where a.Person.PersonId.Equals(BrukerCv.Person.PersonId)
                   select new
                   {
                       a.Prosjekt.ProsjektId,
                       a.Prosjekt.Navn,
                       a.Prosjekt.Kunde,
                       a.Prosjekt.TekniskProfil,
                       a.MedlemId,
                       a.Rolle,
                       a.Start,
                       a.Slutt
                   };

我想像json一样返回它,所以我用这个

return Json(Data, JsonRequestBehavior.AllowGet);

但是我遇到的问题是我得到了错误

在序列化“System.Data.Entity.DynamicProxies.CVVersjon_4F0DBDC27A40F2FDF90760ABFDE49CBE0B75F52902B1C5F1E466393543AC44E8”类型的对象时检测到循环引用。

我想这是因为a.Prosjekt.TekniskProfilICollection

那么我怎样才能获得 ICollection?

就像,我不想要 ICollection TekniskProfil 中的所有值,只想要某些值

TekniskProfil 表中有一个对Prosjekt 表的引用,这是我不希望我猜测的

【问题讨论】:

    标签: c# asp.net-mvc linq asp.net-mvc-3


    【解决方案1】:

    您可以只选择投影数据时需要的值:

    select new
    {
        ProsjektId = a.Prosjekt.ProsjektId,
        Navn = a.Prosjekt.Navn,
        Kunde = a.Prosjekt.Kunde,
        TekniskProfil = a.Prosjekt.TekniskProfil.Select(x => new
        {
            // Select only the properties you need here and avoid
            // circular references - exclude all properties that contain
            // circular object graphs
            Foo = x.Foo,
            Bar = x.Bar,
        }),
        ...
    };
    

    【讨论】:

      【解决方案2】:

      问题的根本原因很可能是 a.Prosjekt.TekniskProfil 包含对象,其中该对象包含对 medlem 的引用。 在序列化过程中,然后检测到 medlem 实际上已经被序列化,因此您会收到错误。

      Darin 提供的投影解决方案解决了这个问题,但我认为很高兴知道你为什么也会得到这个错误。

      我不会说你的语言,所以很难推断发生了什么。但是每当我得到这个错误时,它是在序列化过程中以某种方式找到它回到一个首先被序列化的对象的方式。如果序列化从哪里继续,那将是一个死循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多