我想使用默认的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
静态方法设置全局选项。
为了在全球范围内使用它,我创建了一个公共静态属性,然后我可以将其添加到任何我想要的地方。