Asp.net mvc 返回带有子列表的对象的Web API
有了WebAPI,当我返回一个简单的对象时,一切都很好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)
[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; }
}