在中间件中序列化为 JSON 时如何忽略 null 属性?

Ish*_*mas 5 c# serialization json .net-core asp.net-core

ASP.NET Core Web API返回以下 DTO 类时,我想忽略 null 属性(我使用的System.Text.Json;是 ,而不是Newtonsoft.Json)。我想在中间件(在 Startup 类中)而不是在控制器中执行此操作。这是 C# 类:

public class VehicleOutput
{
    public int VehicleId { get; set; }
    public string Owner { get; set; }

    public Car Car { get; set; }
    public Truck Truck { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是JSON我想返回的(我不想显示事实上"car": null是否Car为空,并且相同Truck):

[
    {
        "vehicleId": 1,
        "owner": "ABS",
        "car": 
        {
            "carId": 123,
            "model": "Foo"
        }
    },
    {
        "vehicleId": 2,
        "owner": "ABS",
        "truck": 
        {
            "truckId": 123,
            "model": "Bar"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

我能够通过在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));
    }
Run Code Online (Sandbox Code Playgroud)

但我不想每次返VehicleOutput课时都重复这段代码。所以我想在中间件中做到这一点。这就是我得到的:

        services.AddControllers()
           .AddJsonOptions(opt =>
           {
               opt.JsonSerializerOptions.IgnoreNullValues = true;
           });
Run Code Online (Sandbox Code Playgroud)

有用!它会忽略 JSON 中的 null 属性,但它会对我在 API 中返回的每个对象执行此操作。我只想为特定类别添加此选项(例如VehicleOutput)。你怎么能在Startup课堂上这样做呢?

请记住...我没有使用Newtonsoft.Json. 我正在使用System.Text.Json;并且我想坚持使用它(如果可能的话)