Web API返回带有子列表的对象

时间:2014-03-20 22:18:47

标签: asp.net-mvc entity-framework asp.net-web-api

使用Web API,当我返回如下的简单对象时,一切正常;

    [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.IsSuccessStatusCode'是假的。它可能是在序列化子集合时遇到问题吗?

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

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

Kenneth提供的答案。

辅助对象有一个返回父对象的引用,导致序列化中断。

例如:

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; }        
}