You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中如何在Program.cs全局配置JsonSerializer选项?

问题原因及解决办法

核心原因

  • ASP.NET Core宿主ConfigureServices中配置的JsonSerializerOptions,是供框架内部组件使用的(比如API控制器的请求/响应序列化、依赖注入链中的相关服务),和静态方法JsonSerializer.Deserialize<T>无参重载用的不是同一个实例。
  • 无参的JsonSerializer.Deserialize<T>默认使用的是JsonSerializerOptions.Default这个全局静态实例,你在DI里配置的自定义选项不会覆盖它,自然也不会生效。

可行解决方式

方式1:注入自定义配置实例

在Program.cs里把自定义的JsonSerializerOptions注册为单例:

builder.Services.AddSingleton(new JsonSerializerOptions
{
    Encoder = JavaScriptEncoder.Default,
    IncludeFields = true
});

之后在需要反序列化的类里通过构造函数注入这个实例,再传入Deserialize方法:

private readonly JsonSerializerOptions _customJsonOptions;

public YourService(JsonSerializerOptions customJsonOptions)
{
    _customJsonOptions = customJsonOptions;
}

// 反序列化时使用
var wsRequest = JsonSerializer.Deserialize<WsRequest>(data, _customJsonOptions);

方式2:修改全局默认静态实例(不推荐)

直接修改JsonSerializerOptions.Default的属性,这样所有用无参Deserialize的地方都会生效,但这种全局修改容易和其他组件的配置冲突,不适合复杂项目:

JsonSerializerOptions.Default.Encoder = JavaScriptEncoder.Default;
JsonSerializerOptions.Default.IncludeFields = true;

内容的提问来源于stack exchange,提问作者PassionateDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:06:24