Как игнорировать нулевые свойства при сериализации до JSON в промежуточном программном обеспечении? - PullRequest
0 голосов
/ 22 марта 2020

В 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; и хочу придерживаться его (если возможно)

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