.NET 6控制台应用:为Generic Host配置Newtonsoft Json.NET替代默认JSON库
在.NET 6控制台应用中为Generic Host配置Newtonsoft Json.NET作为JSON配置解析器
步骤1:安装必要的NuGet包
首先需要安装官方提供的配置适配包,让.NET配置系统支持Newtonsoft.Json:
dotnet add package Microsoft.Extensions.Configuration.NewtonsoftJson
步骤2:修改Generic Host初始化代码
默认的CreateDefaultBuilder会使用System.Text.Json解析JSON配置文件,我们需要替换为Newtonsoft.Json的实现。修改后的完整代码如下:
Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { // 移除默认使用System.Text.Json的JSON配置源 var defaultJsonSource = config.Sources.FirstOrDefault(s => s is JsonConfigurationSource); if (defaultJsonSource != null) { config.Sources.Remove(defaultJsonSource); } // 添加appsettings.json,使用Newtonsoft Json.NET解析 config.AddNewtonsoftJsonFile( "appsettings.json", optional: false, reloadOnChange: true); // 添加环境专属配置文件(如appsettings.Development.json) config.AddNewtonsoftJsonFile( $"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true); }) .ConfigureLogging(...) .ConfigureServices(...) .UseConsoleLifetime() .Build() .StartAsync();
说明
- 移除默认JSON配置源是为了避免重复加载配置,确保所有JSON配置都通过Newtonsoft.Json解析。
AddNewtonsoftJsonFile方法的参数和原生AddJsonFile一致,保持了配置习惯的连贯性。- Newtonsoft.Json原生支持
BigInteger类型的解析,无需额外配置即可正常加载配置文件中的BigInteger值。如果需要自定义序列化规则,可以通过传入NewtonsoftJsonConfigurationOptions调整,示例:config.AddNewtonsoftJsonFile("appsettings.json", options => { options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; // 其他自定义配置 });
内容的提问来源于stack exchange,提问作者Heinrich Ulbricht
相关产品推荐
相关产品推荐

