我收到一条错误,指出在序列化类型的对象时检测到循环引用。我相信它与我的数据库有关,以及我如何拥有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;
}
以下是我的数据库架构的图片:
答案 0 :(得分:1)
如果您首先使用代码,请避免使用virtual
模型中User
属性的Playlist
关键字和Playlist
模型中的Song
。
由于Playlist
会自动加载您的User
模型,因此您的Playlist
又会User
,并且循环继续。
答案 1 :(得分:1)
您有非常循环引用。您的Users
有PlayLists
,每个PlayList
都有一个用户,还有一个Songs
列表,每个列表都在PlayList
。
User 1
,您必须序列化PlayList 1
。 PlayList 1
,您必须序列化其User
,即User 1
User 1
,您必须序列化PlayList 1
。 等
正如其他地方所述,解决方案是不直接公开您的数据模型。您要序列化的内容是包含外键的内容,而不是对Entity Framework模型的引用。因此,您的UserDTO
对象可能包含Id,用户名,密码和播放列表ID列表,而不是PlayList
列表。每个PlayListDTO
都会包含一个ID,UserId
和一个SongId
等列表。