"循环参考"序列化数据库对象时的异常

时间:2014-04-25 23:57:47

标签: c# asp.net-mvc entity-framework javascriptserializer

我收到一条错误,指出在序列化类型的对象时检测到循环引用。我相信它与我的数据库有关,以及我如何拥有PK和FK的设置。

    public string GetSongs(int playlistId)
    {
        var songs = (from song in _db.Songs where song.PlaylistId == playlistId select song).ToList();
        var serializer = new JavaScriptSerializer();
        var json = serializer.Serialize(songs); // ERROR MESSAGE HERE
        return json;
    }

以下是我的数据库架构的图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您首先使用代码,请避免使用virtual模型中User属性的Playlist关键字和Playlist模型中的Song。 由于Playlist会自动加载您的User模型,因此您的Playlist又会User,并且循环继续。

答案 1 :(得分:1)

您有非常循环引用。您的UsersPlayLists,每个PlayList都有一个用户,还有一个Songs列表,每个列表都在PlayList

  1. 要序列化User 1,您必须序列化PlayList 1
  2. 要序列化PlayList 1,您必须序列化其User,即User 1
  3. 要序列化User 1,您必须序列化PlayList 1
  4. 正如其他地方所述,解决方案是不直接公开您的数据模型。您要序列化的内容是包含外键的内容,而不是对Entity Framework模型的引用。因此,您的UserDTO对象可能包含Id,用户名,密码和播放列表ID列表,而不是PlayList列表。每个PlayListDTO都会包含一个ID,UserId和一个SongId等列表。