1

1つの投稿が複数のpostCommentsを持つことができるという関係を持とうとすると、以下のこのエラーが発生します

System.Collections.Generic.List`1[[DAO.Models.PostComment, DAO, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' 型のオブジェクトのシリアル化中に循環参照が検出されました。

int userId = (int)Session["UserId"];
try
{
    IEnumerable<Post> userPosts;
    userPosts = (from q in db.Posts
                    where q.UserId == userId
                    && q.PostId > postid
                    select q).Take(5).ToList();


    return Json(userPosts.Select(x => new
    {
        success = 1,
        contenttext = x.PostContent,
        postId = x.PostId,
        comments = x.PostComments
    }), JsonRequestBehavior.AllowGet);

}
catch (Exception ex)
{
    return Json(new { success = 0 });

}
finally
{
    //db.Dispose();
}

私の投稿クラス

public partial class Post
{
    public Post()
    {
        this.PostComments = new List<PostComment>();
    }

    public int UserId { get; set; }
    public int PostId { get; set; }
    public string PostContent { get; set; }        
    public virtual ICollection<PostComment> PostComments { get; set; }

    public partial class PostComment
    {
        public long PostCommentID { get; set; }
        public int PostId { get; set; }
        public int ParentCommentID { get; set; }
        public System.DateTime CommentDate { get; set; }
        public string Comment { get; set; }
        public virtual Post Post { get; set; }
    }   
}
4

2 に答える 2

4

あなたのPostクラスでは PostComment を参照し、あなたのPostCommentクラスでは再び参照します。これは循環参照が発生した場所です。Json.NET http://james.newtonking.com/pages/json-net.aspxPostを使用できます。そして以下を行います

JsonConvert.SerializeObject(myObject, Formatting.Indented, 
                            new JsonSerializerSettings { 
                                   ReferenceLoopHandling = ReferenceLoopHandling.Ignore 
                            })

参照ループ処理を無視するか、シリアル化する前に匿名クラスにキャストします。

于 2013-03-22T01:05:07.400 に答える
0

これは、いくつかのテーブルの有効な行を参照する必要がある特定の列について、データベースにいくつかの制約があり、ここに循環参照があることを意味します。相互に依存する順序で行を更新する必要がありますが、循環参照のため、これは不可能です。その時点でデータベースの制約を満たす、最初に更新できる単一の行はありません。

于 2013-03-22T00:58:06.260 に答える