ASP.NET Web API 2序列化时缺少子实体

时间:2015-05-11 11:40:41

标签: asp.net angularjs web-services entity-framework-6 asp.net-web-api2

我目前正在构建一个有角度的网站,并使用Web Api 2作为我的数据服务。

当我调用http get方法时,我遇到了填充子实体的问题。子实体(字段)不会出现在Json响应中。

     //Fetch records by page size
    public ICollection<CompanyStatDomainModel> GetRecordsByPageSize(int page)
    {
        const int pgeSize = 20;

        var result = _companyStatRepo.AllIncluding(c => c.CompanyDomainModel, c => c.RatingDomainModels)
            .OrderBy(c => c.CompanyStatId).Skip(page * pgeSize).Take(pgeSize).ToList();

        return result;
    }

CONTROLLER

   public ICollection<CompanyStatDomainModel> GetRecordsByPageSize(int page)
   {
       var companyStatService = new CompanyStatService();

       return companyStatService.GetRecordsByPageSize(page);
   }

WebApiConfig.cs

     var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        config.Formatters.Remove(config.Formatters.XmlFormatter);

1 个答案:

答案 0 :(得分:0)

解决此类问题的最简单方法是将EF查询的结果手动投影到所需的结构,例如

var result = _companyStatRepo
  .AllIncluding(c => c.CompanyDomainModel, c => c.RatingDomainModels)
  .OrderBy(c => c.CompanyStatId).Skip(page * pgeSize)
  .Take(pgeSize).Select(csr => new CompanyStatRepo {
     prop1 = csr.prop1,
     prop2 = csr.prop2,
     ...
     RatingDomainModels = csr.RatingDomainModels.ToList()
  }).ToList();

我不知道你班级的真实结构,但这是基本的想法。