如何在.net 6中的programm.cs中设置JsonSerializer选项



我想使用默认的jsonSerializer(而不是来自newtsoft的(,这是我的工作代码:

WsRequest request = JsonSerializer.Deserialize<WsRequest>(data, new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Default,
IncludeFields = true,
});

现在我想在全球范围内设置选项,我尝试了这个:

var host = Host.CreateDefaultBuilder(args);
host.ConfigureLogging((context, builder) => builder.AddConsole());
host.ConfigureServices((context, services) =>
{
services.Configure<JsonSerializerOptions>(options =>
{
options.Encoder = JavaScriptEncoder.Default;
options.IncludeFields = true;
});

// Controller
services.AddTransient<IWsPost<LoginPostModel>, LoginController>();
services.AddTransient<IWsPostPublic<RegistrationPostModel>, RegistrationController>();
services.AddTransient<IWsPostPublic<NewPasswordPostModel>, NewPasswordController>();

// Others
services.AddTransient<IWsApiManager, WsApiManager>();
services.AddTransient<IWsClient, WsClient>();
services.AddHostedService<WsServerService>();
});
await host.RunConsoleAsync();

WsRequest request = JsonSerializer.Deserialize<WsRequest>(data);

但结果是这些设置没有被使用——为什么会这样?

据我所知,'program.cs'中设置的JsonSerializerOptions仅在返回JsonResult和从表单绑定Json数据时用于页面。

它没有为JsonSerializer静态方法设置全局选项。

为了在全球范围内使用它,我创建了一个公共静态属性,然后我可以将其添加到任何我想要的地方。

最新更新