この答え から適応したカスタムフィルター属性があり、現在.NET Core 2.2に実装されており、3.1に適応させたいと考えています。それはNewtonsoft.JSONを参照し、互換性の理由からそれをそのように維持したいと思います。
コードは次のとおりです。
public class AllPropertiesAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext ctx)
{
if (!(ctx.Result is ObjectResult objectResult)) return;
var serializer = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include };
serializer.Converters.Add(new StringEnumConverter());
var formatter = new JsonOutputFormatter(serializer,
ctx.HttpContext.RequestServices.GetRequiredService<ArrayPool<char>>());
objectResult.Formatters.Add(formatter);
}
}
JsonOutputFormatter
は.netコア2.2までのみサポートされています 公式ドキュメントによると ; 3.1で同じ動作を維持するにはどうすればよいですか?
.Net Core 3はそれをもたらします 独自のJSON機能 で、デフォルトではJson.Netは含まれていません。
別の方法として、これが可能な場合は、別のパッケージを含める代わりに、ネイティブの SystemTextJsonOutputFormatter を使用できます。
public override void OnActionExecuted(ActionExecutedContext ctx)
{
if (!(ctx.Result is ObjectResult objectResult)) return;
var serializer = new JsonSerializerOptions { IgnoreNullValues = false };
serializer.Converters.Add(new JsonStringEnumConverter());
var formatter = new SystemTextJsonOutputFormatter(serializer);
objectResult.Formatters.Add(formatter);
}