Возврат JSON из контроллера WebApi с использованием включенных свойств - PullRequest
0 голосов
/ 03 мая 2019

Я хотел бы вернуть JSON из контроллера Web Api 2.Мой текущий код не работает с включенными свойствами.Мой метод получения:

[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.

Желаемая структура JSON:

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

Кто-нибудь знает, как с этим справиться?

1 Ответ

0 голосов
/ 03 мая 2019

Я понял это через долгое время:

[System.Web.Mvc.HttpGet]
public IHttpActionResult GetEmployee()
{
    var employee= db.Employee.Include(x => x.Department);
    return Json(employee, new JsonSerializerSettings(){ReferenceLoopHandling = ReferenceLoopHandling.Ignore});

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...