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

如何在Startup.cs中复用自定义的JsonSerializerOptions实例?

复用自定义JsonSerializerOptions到ASP.NET Core控制器的解决方案

你已经定义了包含自定义JSON配置的JsonHelper类,但在AddJsonOptions中无法直接替换JsonSerializerOptions实例——因为该属性是只读的。以下是两种可行的解决方法:

方法一:逐个复制配置属性

既然无法直接替换实例,可将JsonHelper.Options中的配置项逐个同步到AddJsonOptions提供的JsonSerializerOptions实例中:

var builder = services.AddControllers(options =>
{
    options.EnableEndpointRouting = false;
}).AddJsonOptions(jsonOptions =>
{
    var customOptions = JsonHelper.Options;
    
    // 复制核心配置属性
    jsonOptions.JsonSerializerOptions.PropertyNameCaseInsensitive = customOptions.PropertyNameCaseInsensitive;
    jsonOptions.JsonSerializerOptions.PropertyNamingPolicy = customOptions.PropertyNamingPolicy;
    jsonOptions.JsonSerializerOptions.DictionaryKeyPolicy = customOptions.DictionaryKeyPolicy;
    jsonOptions.JsonSerializerOptions.Encoder = customOptions.Encoder;
    jsonOptions.JsonSerializerOptions.NumberHandling = customOptions.NumberHandling;
    jsonOptions.JsonSerializerOptions.ReadCommentHandling = customOptions.ReadCommentHandling;
    jsonOptions.JsonSerializerOptions.UnknownTypeHandling = customOptions.UnknownTypeHandling;
    jsonOptions.JsonSerializerOptions.DefaultIgnoreCondition = customOptions.DefaultIgnoreCondition;
    
    // 复制转换器集合
    foreach (var converter in customOptions.Converters)
    {
        jsonOptions.JsonSerializerOptions.Converters.Add(converter);
    }
});

方法二:替换全局JsonSerializerOptions服务

ASP.NET Core允许直接注册自定义的JsonSerializerOptions实例,让控制器自动复用该配置:

// 先将自定义配置注册为单例服务
services.AddSingleton(JsonHelper.Options);

// 配置控制器
var builder = services.AddControllers(options =>
{
    options.EnableEndpointRouting = false;
});

这种方式会让整个应用中依赖JsonSerializerOptions的组件(包括控制器)都使用这个自定义实例,无需额外在AddJsonOptions中重复配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:10:26