如何在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
相关产品推荐
相关产品推荐

