#c# #asp.net-core #.net-5
#c# #asp.net-core #.net-5
Вопрос:
Я использую ASP.NET Core 5, я не хочу переходить с Newtonsoft.Json
на System.Text.Json
, но в некоторых случаях я хочу использовать System.Text.Json
для повышения производительности в действиях контроллера.
Например, в ActionA я хочу использовать поведение Newtonsoft.Json
сериализатора по умолчанию, а в ActionB я хочу изменить поведение на System.Text.Json
сериализатор.
Комментарии:
1. Плохая идея. .NET core был оптимизирован для того, чтобы больше не использовать newtonsoft по соображениям производительности. Лучше сразу использовать новый способ работы.
Ответ №1:
Насколько я знаю, нет встроенного способа определения Jsonconvert для конкретного контроллера.
Если вы хотите изменить сгенерированный результат json jsonconvert, я предлагаю вам попробовать использовать этот способ.
Я предлагаю вам попробовать использовать actionfilter для достижения ваших требований.
Используя actionfilter, вы можете изменить форматировщик ввода, чтобы использовать другой jsonconvert для преобразования данных.
public class CaseActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext ctx)
{
if (ctx.Result is ObjectResult objectResult)
{
objectResult.Formatters.Add(new SystemTextJsonOutputFormatter(new JsonSerializerOptions
{
IgnoreNullValues = true
}));
}
}
}
Использование:
[HttpPost]
[CaseAction]
public ActionResult Index([FromForm]Member member) {
if (ModelState.IsValid)
{
RedirectToAction("Index");
}
return Ok();
}
Если вы хотите установить преобразование для связующего элемента модели, единственный способ — создать связующий элемент cusotmer modle и изменить средство форматирования json в соответствии с каждым типом модели. Нет способа достичь этого в соответствии с asp.net ядро модифицировало iresoucefilter, чтобы не поддерживать форматирование change is.
Комментарии:
1. Я считаю, что это пропускает обработку для случая, когда действие возвращает a
JsonResult
.