ODATAController多级序列化

时间:2014-09-09 03:55:59

标签: json entity-framework odata asp.net-apicontroller

我使用的是Odata控制器。关于响应我希望siteUsers和siteUser.Login进行序列化。目前只有最高级别的siteUsers正在序列化。这样做的最佳方式是什么?

命名空间SOW.Controllers {

public class SiteUsersController : ODataController
{


    // POST: odata/SiteUsers
    public IHttpActionResult Post(SiteUser siteUser)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.SiteUsers.Add(siteUser);
        db.SaveChanges();

        return Created(siteUser);
    }

}

public partial class SiteUser
{
    public int SiteUsersId { get; set; }
    public int SiteId { get; set; }
    public int LoginId { get; set; }
    public string CreatedBy { get; set; }
    public Nullable<System.DateTime> CreateDate { get; set; }
    public string UpdatedBy { get; set; }
    public Nullable<System.DateTime> UpdatedDate { get; set; }

    public virtual Login Login { get; set; }
    public virtual Site Site { get; set; }
}




 public partial class Login
    {
        public Login()
        {
            this.SiteUsers = new HashSet<SiteUser>();
            this.SOWTransactions = new HashSet<SOWTransaction>();
        }

        public int LoginId { get; set; }
        public string UserName { get; set; }
        public string DisplayName { get; set; }
        public string eMail { get; set; }
        public Nullable<bool> active { get; set; }
        public Nullable<System.DateTime> LastLogon { get; set; }

        public virtual ICollection<SiteUser> SiteUsers { get; set; }
        public virtual ICollection<SOWTransaction> SOWTransactions { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

登录未显示的原因是因为它是与SiteUser不同的实体类型,因此在SiteUser类中具有Login类型属性将使其成为SiteUser实体的导航属性。

为了让服务在请求SiteUsers的响应中返回Login,您需要确保[EnableQuery]

中的Get操作具有SiteUsersController属性
[EnableQuery]
public IQueryable<SiteUser> Get()
{
    return db.SiteUsers;
}

并将此类请求发送到服务

GET http://host/service/odata/SiteUsers?$expand=Login