Entity framework 4 使用Controller.Json()方法序列化时获取循环引用
我有一个edmx模型,我使用的POCO如下: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
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。