System.Text. Json -> Сериализует только указанные c поля на вызов - PullRequest
2 голосов
/ 03 марта 2020

В. NET Core 3 веб-API я хочу сериализовать объект со многими свойствами. В зависимости от разрешений вызывающего, я хочу показать или скрыть указанные c свойства. Сейчас я работаю исключительно с атрибутом [JsonIgnore]. Это хорошо для свойств, которые вы обычно не хотите сериализовать.

Но есть ли что-то похожее на [JsonIgnore(context => context.CheckUserPermissions())]? Или, может быть, что-то, что я могу добавить в свой метод API?

Мой текущий код довольно прост:

[HttpGet("PickingZoneLists/{pickingZone}")]
public async Task<ActionResult<PickingListEntry[]>> GetData(string pickingZone) {
    // Get data
    dsyWorkOrder[] workOrders;

    try {
        workOrders = await GetPickingDocList(pickingZone);
    } catch (Exception ex) {
        return Problem("Data could not be gathered. " + ex.Message);
    }

    // Validate result
    if (workOrders == null)
        return Problem("Service returned invalid data.");

    if (workOrders.Length == 0)
        return NotFound();

    // Transform data
    PickingListEntry[] result;

    try {
        result = PickingListEntry.FromServiceResponse(workOrders).ToArray();
    } catch (Exception ex) {
        return Problem("Data could not be transformed. " + ex.Message);
    }

    // Maybe apply the filters to PickingListEntry here <-------------------

    // Create response object and return
    return Ok(result);
}
...