Asp.net mvc 返回带有子列表的对象的Web API

Asp.net mvc 返回带有子列表的对象的Web API,asp.net-mvc,entity-framework,asp.net-web-api,Asp.net Mvc,Entity Framework,Asp.net Web Api,有了WebAPI,当我返回一个简单的对象时,一切都很好 [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)] [HttpGet] [Route("UserInfo")] public User GetUserInfo() { string id = User.Identity.GetUserId(); User usr = db.Users.Find(id)

有了WebAPI,当我返回一个简单的对象时,一切都很好

    [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
    [HttpGet]
    [Route("UserInfo")]
    public User GetUserInfo() {

        string id = User.Identity.GetUserId();
        User usr = db.Users.Find(id);
        return user;
    }
但是,当我尝试将子记录添加到我的对象时,如下所示(用户在“Friends”集合中有一个AppUserInfo对象列表),我可以看到API返回一个带有填充列表的用户(如预期的那样),但我在客户端接收到“null”内容

        User user = db.Users
                    .Where(u => u.Id == id)
                    .Include(u => u.Friends)
                    .FirstOrDefault();
        return user;
我正试图在客户端上调用此函数,但收到“null”内容的错误,并且“response.issucessStatusCode”为false。它似乎在序列化子集合时遇到了问题,也许

var response = await client.GetAsync("api/Account/UserInfo");

有人能解释为什么会发生这种情况吗?

答案由肯尼思提供

次对象具有对父对象的引用,导致序列化中断

例如:

公共类用户{
public int UserId{get;set;}
公共字符串名称{get;set;}
公共列表信息{get;set;}
}
公共类用户信息{
public int UserInfoId{get;set;}
[外键]
public int UserId{get;set;}
公共用户{get;set;}
}

您的“朋友”收藏中是否可能有对该用户的引用?在这种情况下,序列化将遇到一个引用循环并导致一个错误,这正是它的原委。
public class User {
    public int UserId { get; set; }
    public string name { get; set; }
    public List<UserInfo> Infos { get; set; }
}

public class UserInfo {
    public int UserInfoId { get; set; }
    [ForeignKey]
    public int UserId { get; set; }
    public User user { get; set; }        
}