使用Included属性从WebApi控制器返回JSON

时间:2019-05-03 14:32:27

标签: asp.net json entity-framework

我想从Web Api 2控制器返回JSON。我当前的代码不适用于“包含的”属性。我的获取方法是:

[System.Web.Mvc.HttpGet]
public IQueryable<Employee> GetEmployee()
{
    return db.Employee.Include(x=>x.Department);
}

我已将以下行添加到我的WebApiConfig中:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

明白了,我得到这个错误:

  

'ObjectContent`1'类型无法序列化响应主体   内容类型'application / json; charset = utf-8'。

当我使用标准控制器(不是Api控制器)时,我的代码是:

[HttpGet]
public ActionResult GetCountries()
{
    var countries = JsonConvert.SerializeObject(db.Countries.Include(x => x.Regions), Formatting.None, new JsonSerializerSettings() {ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore });
    return Content(countries, "application/json");

}

但是Content()是特定于Controller类的,我想它不能在WebApi Controller中使用。

所需的JSON结构为:

[
    {
        "Iso3": "AL",
        "CountryNameEnglish": "Alaska",
        "Regions": [
            {
                "RegionCode": "AL1",
                "Iso3": "AL",
                "RegionNameEnglish": "Alaskan Region 1"
            },
            {
                "RegionCode": "AL2",
                "Iso3": "AL",
                "RegionNameEnglish": "Alaskan Region 2"
            }
        ]
    }
]

有人知道如何处理吗?

1 个答案:

答案 0 :(得分:0)

我想了很久:

scp