'Fresh ASP.NET Core API returns empty JSON objects
I have made a .NET Core Web API project to test it out.
My problem is, that the API returns an empty JSON object, when I request the endpoint, which is located at "/api/cars/123" for instance. This happens no matter what kind of object I put in, unless it's any primitive datatype, or an array thereof. The response is always:
{}
The configuration of the application is completely default, on a fresh Visual Studio 2017 installation.
I have the following classes:
Car.cs
namespace Ex6.Entities
{
public class Car
{
private int Id { get; set; }
private string Make { get; set; }
private string Model { get; set; }
public Car(int Id, string Make, string Model)
{
this.Id = Id;
this.Make = Make;
this.Model = Model;
}
}
}
CarsController.cs:
using Microsoft.AspNetCore.Mvc;
using Ex6.Entities;
namespace Ex6.Controllers
{
[Route("api/[controller]")]
public class CarsController : Controller
{
[HttpGet("{id}")]
public JsonResult GetCar(int id)
{
return Json(new Car(1, "Toyota", "Aygo" ));
}
}
}
Am I missing something?
Solution 1:[1]
In order for the JsonSerializer to be able to see and serialize your properties, they need to be public:
public int Id { get; private set; } //the setters can be private
public string Make { get; set; }
public string Model { get; set; }
Solution 2:[2]
Try this by adding configure
services.AddControllersWithViews().AddNewtonsoftJson();
....AddNewtonsoftJson() this should solve the issue.
Solution 3:[3]
For some reason, Text.JSON doesn't serialize public fields as well, so they need to be properties. This solved the similar issue for me
Solution 4:[4]
Try to define your entity like this:
namespace Ex6.Entities
{
public class Car
{
public int Id { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public Car(int _Id, string _Make, string _Model)
{
Id = _Id;
Make = _Make;
Model = _Model;
}
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | PavelPerov |
Solution 4 | Elias Bobadilla |