Ext*_*Use 5 c# asp.net-core json-serialization
我的应用程序需要(几乎默认)JSON 序列化设置:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat;
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
});
Run Code Online (Sandbox Code Playgroud)
仅对于一个控制器,我需要为两个输入使用不同的命名策略(我使用模型绑定[FromBody] myComplexObject
和输出
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
Run Code Online (Sandbox Code Playgroud)
我的问题几乎与Web API相同:在操作或控制器级别配置 JSON 序列化程序设置,但我要求的 AspNet Core 2.2+IControllerConfiguration
已不再存在。
Core 2.1+ 等效问题在这里有一个回复:Configure input/output formatters on controllers with ASP.NET Core 2.1
那里的答案似乎有些零散或不完整 - 很难想象没有更简单的方法可以实现这一目标。有人会知道如何在单个控制器中为所有输入和输出使用 DefaultContractResolver 吗?
您链接的答案效果很好,但您可以通过将其包装在可以应用于任何操作或控制器的属性中来进一步扩展它。例如:
public class JsonConfigFilterAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is ObjectResult objectResult)
{
var serializerSettings = new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver()
};
var jsonFormatter = new JsonOutputFormatter(
serializerSettings,
ArrayPool<char>.Shared);
objectResult.Formatters.Add(jsonFormatter);
}
base.OnResultExecuting(context);
}
}
Run Code Online (Sandbox Code Playgroud)
只需将其添加到操作方法或控制器中:
[JsonConfigFilter]
public ActionResult<Foo> SomeAction()
{
return new Foo
{
Bar = "hello"
};
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5526 次 |
最近记录: |