Asp.net mvc 将EF对象序列化为JSON-ASP.NET MVC
我有一个EF对象:Asp.net mvc 将EF对象序列化为JSON-ASP.NET MVC,asp.net-mvc,json,entity-framework,Asp.net Mvc,Json,Entity Framework,我有一个EF对象: public class User { [Key, Column("userid", TypeName = "int")] public Int32 UserId { get; set; } [Column("username", TypeName = "varchar")] public String UserName { get; set; } [Column("password", TypeName = "varchar")
public class User
{
[Key, Column("userid", TypeName = "int")]
public Int32 UserId { get; set; }
[Column("username", TypeName = "varchar")]
public String UserName { get; set; }
[Column("password", TypeName = "varchar")]
public String Password { get; set; }
[Column("name", TypeName = "varchar")]
public String Name { get; set; }
[Column("surname", TypeName = "varchar")]
public String Surname { get; set; }
[Column("email", TypeName = "varchar")]
public String Email { get; set; }
[Column("dob", TypeName = "datetime")]
public Nullable<DateTime> Dob { get; set; }
[Column("notes", TypeName = "nvarchar")]
public String Notes { get; set; }
[Column("masterentity", TypeName = "varchar")]
public String MasterEntity { get; set; }
[Column("propertyid", TypeName = "int")]
public Nullable<Int32> PropertyId { get; set; }
[Column("boardmember", TypeName = "bit")]
public Boolean BoardMember { get; set; }
[Column("occupiesunit", TypeName = "bit")]
public Boolean OccupiesUnit { get; set; }
[Column("systemuser", TypeName = "bit")]
public Boolean SystemUser { get; set; }
[Column("isactive", TypeName = "bit")]
public Boolean IsActive { get; set; }
#region Foreing Keys
[ForeignKey("MasterEntity")]
public virtual Entity CurrentMasterEntity { get; set; }
#endregion
}
我收到以下错误:
A circular reference was detected while serializing an object of type ....
我意识到,如果我删除Foreing key Fluent API
[ForeignKey("MasterEntity")]
public virtual Entity CurrentMasterEntity { get; set; }
那它就完美了。因此,似乎无法使用JSON序列化与其他实体有关系的实体或对象
有人有解决这个问题的好方法吗?EF5.0能解决这个问题吗
非常感谢。只要实体之间没有循环引用,就可以序列化具有关系的实体。这意味着,如果A
指向B
,而B
指向A
,则不起作用。我怀疑您的CurrentMasterEntity
是否会与实体本身相等,或者是否可能存在一个圆形图(a是master到B,B是master到a),因此您可能存在数据错误或双向导航(通常以实体父级
和ICollection子级
的形式出现)。如果这是一个数据错误,只需修复它。如果您有双向导航,则必须选择一个要序列化的属性,并用[ScriptIgnore]
标记另一个属性,以便它不会被序列化
但如果您不需要在客户端使用
CurrentMasterEntity
,只需使用前面提到的[ScriptIgnore]
标记即可。我已经编辑了您的答案,请参阅我的评论。非常感谢并保持联系。我从控制器返回如下实体:var userObj=db.Users.Where(u=>u.UserId==id).FirstOrDefault();返回PartialView(userObj);这可以吗?我拒绝了你的编辑,对不起,这应该是另一个评论。但是你说你添加了ScriptIgnore
,什么也没发生。我怀疑有两件事:要么你向我们展示了更多的类,要么Json序列化因为在你的类上构建了代理EF而变得混乱。你真的需要它吗?如果没有,请尝试从类中删除virtual
修饰符并放置ScriptIgnore
。是的,实际上我需要的是创建一个没有任何Fluent API内容的克隆类(一个干净的类),然后使用AutoMapper将EF对象映射到这个干净的类。这条路行得通。。但如果EF让你直接这么做就太好了。你需要EF代理做什么?
[ForeignKey("MasterEntity")]
public virtual Entity CurrentMasterEntity { get; set; }