В ASP.NET Core Web API
Я хочу игнорировать нулевые свойства при возврате следующего класса DTO (я использую System.Text.Json;
, а не Newtonsoft.Json
). Я хочу сделать это в промежуточном программном обеспечении (в классе запуска), а не в контроллере. Вот класс C#:
public class VehicleOutput
{
public int VehicleId { get; set; }
public string Owner { get; set; }
public Car Car { get; set; }
public Truck Truck { get; set; }
}
Это JSON
Я бы хотел вернуться (я не хочу показывать "car": null
, если Car
на самом деле равно нулю, и то же самое для Truck
):
[
{
"vehicleId": 1,
"owner": "ABS",
"car":
{
"carId": 123,
"model": "Foo"
}
},
{
"vehicleId": 2,
"owner": "ABS",
"truck":
{
"truckId": 123,
"model": "Bar"
}
}
]
Я смог достичь этого, сделав это в Controller
. Это работает !:
[HttpGet]
public async Task<ActionResult> GetVehicles()
{
var vehiclesOutput = await _vehicleService.GetVehicles();
var options = new JsonSerializerOptions
{
IgnoreNullValues = true,
WriteIndented = true
};
return Ok(JsonSerializer.Serialize(vehiclesOutput, options));
}
Но я не хочу повторять этот код каждый раз, когда возвращаю VehicleOutput
класс. Поэтому я хочу сделать это в промежуточном программном обеспечении. Вот что я получил:
services.AddControllers()
.AddJsonOptions(opt =>
{
opt.JsonSerializerOptions.IgnoreNullValues = true;
});
Работает! Он игнорирует нулевые свойства в JSON, но делает это для каждого объекта, который я возвращаю в API. Я хочу добавить эту опцию ТОЛЬКО для определенных c классов (например, VehicleOutput
). Как вы можете сделать это в Startup
классе?
Имейте в виду ... Я не использую Newtonsoft.Json
. Я использую System.Text.Json;
и хочу придерживаться его (если возможно)