我有像这样的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.TekniskProfil
是ICollection
那么我怎样才能获得ICollection?
就像,我不想要ICollection TekniskProfil中的所有值,只需要某些值
TekniskProfil
表格中的引用回到Prosjekt
表格,这是我不想要的猜测
答案 0 :(得分:2)
您只能选择投影数据时所需的值:
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,
}),
...
};
答案 1 :(得分:0)
问题的根本原因很可能是a.Prosjekt.TekniskProfil包含对象,其中该对象包含对medlem的引用。 在序列化过程中,然后检测到medlem实际上已经被序列化,因此你得到了错误。
Darin提供的投影解决方案解决了这个问题,但我认为很高兴知道你为什么会遇到这个错误。
我不会说你的语言,所以很难推断出发生了什么。但每当我遇到这个错误时,就是在序列化过程中,它会以某种方式找回回到首先被序列化的对象。如果序列化在哪里继续,那将是一个无限循环。