Entity framework 4 使用Controller.Json()方法序列化时获取循环引用

Entity framework 4 使用Controller.Json()方法序列化时获取循环引用,entity-framework-4,reference,poco,Entity Framework 4,Reference,Poco,我有一个edmx模型,我使用的POCO如下: public class ContactPerson { public virtual Guid ContactPersonId { get; set; } public virtual string FullName { get; set; } public virtual Guid PositionId { get; set; } public virtual Da

我有一个edmx模型,我使用的POCO如下:

public class ContactPerson
    {
        public virtual Guid ContactPersonId { get; set; }
        public virtual string FullName { get; set; }     
        public virtual Guid PositionId { get; set; }
        public virtual DateTime Birthday { get; set; }       
        public virtual Position Position { get; set; }
          }

public class Position
    {
        public virtual Guid PositionId { get; set; }
        public virtual string Name { get; set; }
        public virtual ICollection<ContactPerson> ContactPersons { get; set; }
    }
公共类联系人
{
公共虚拟Guid ContactPersonId{get;set;}
公共虚拟字符串全名{get;set;}
公共虚拟Guid位置ID{get;set;}
公共虚拟日期时间生日{get;set;}
公共虚拟位置位置{get;set;}
}
公共阶级地位
{
公共虚拟Guid位置ID{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟ICollection联系人{get;set;}
}
当我尝试从in _context.Positions中序列化
时,使用Json()方法选择一个
,它会检测到一个循环引用。我相信这是因为Position引用了ContactPersons集合,ContactPerson同时引用了Position


问题很明显,怎么办?

尝试使用ContactPerson.Position属性。它会说JavaScriptSerializer不会序列化该属性,并且会打破循环引用。

了解该属性(因此是+1)是件好事,但我刚刚发现必须包含System.Web.Script.Serialization才能使用该属性。op的库(与我的库非常相似)是POCO(普通的旧C#/CLR对象),添加对上述库的引用将打破这一概念。如果您想拥有严格的体系结构,您必须在服务层中创建单独的数据传输对象,并将您的POCO类转换为带有序列化属性的DTO。