Asp.net mvc 将EF对象序列化为JSON-ASP.NET MVC

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")

我有一个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 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; }