Я хочу использовать в своем API следующий JSON:
{
"id": 1
"name": "Muhammad Rehan Saeed",
"phone": "123456789",
"address": {
"address": "Main Street",
"postCode": "AB1 2CD"
}
}
Я хочу дать клиенту возможность отфильтровывать свойства, которые им не интересны. Чтобы следующий URL-адрес возвращал подмножество JSON:
`/api/contact/1?include=name,address.postcode
{
"name": "Muhammad Rehan Saeed",
"address": {
"postCode": "AB1 2CD"
}
}
Как лучше всего реализовать эту функцию в ASP.NET Core, чтобы:
- Решение может применяться глобально, к одному контроллеру или действию, например к фильтру.
- Если решение использует отражение, то также должен быть способ оптимизировать конкретное действие контроллера, предоставив ему некоторый код для ручной фильтрации свойств по соображениям производительности.
- Он должен поддерживать JSON, но было бы неплохо поддерживать другие форматы сериализации, такие как XML.
Я нашел это решение, в котором используется настраиваемый JSON.Net ContractResolver. Сопоставитель контрактов можно применить глобально, добавив его к сопоставителю контрактов по умолчанию, используемому ASP.Net Core, или вручную к одному действию, например этот код, но не для контроллера. Кроме того, это реализация, специфичная для JSON.