简体   繁体   English

如何在控制台应用程序 (.net Core) 中将数据写入 appsettings.json?

[英]How to write data to appsettings.json in a console application (.net Core)?

To read data from appsettings.json I use ConfigurationBuilder , ConfigurationBinder .要从appsettings.json读取数据,我使用ConfigurationBuilderConfigurationBinder
ConfigurationBuilder , ConfigurationBinder allow you to read data from appsettings.json . ConfigurationBuilderConfigurationBinder允许你从appsettings.json读取数据。

Questions:问题:
- How to write data to appsettings.json in a console application? - 如何在控制台应用程序appsettings.json数据写入appsettings.json
Can I write data to appsettings.json using ConfigurationBuilder , ConfigurationBinder ?我可以使用ConfigurationBuilderConfigurationBinder将数据写入appsettings.json吗?
Or do I need to use JsonConvert.DeserializeObject <Settings> (fileText) to write data to appsettings.json ?或者我是否需要使用JsonConvert.DeserializeObject <Settings> (fileText)将数据写入appsettings.json
In other words, if you use JsonConvert.DeserializeObject , then I should:换句话说,如果你使用JsonConvert.DeserializeObject ,那么我应该:
- read the data appsettings.json ; - 读取数据appsettings.json
- change the data in the desired section; - 更改所需部分中的数据;
- save the data in appsettings.json . - 将数据保存在appsettings.json

Do I understand the logic of working with appsettings.json ?我理解使用appsettings.json的逻辑吗?

Picture-1图片1
在此处输入图片说明

Picture-2图2
在此处输入图片说明

Code AppSettings.cs代码AppSettings.cs

namespace ConsoleAppCore
{
    class AppSettings
    {
        public string KeyA_SecMain { get; set; }
        public string KeyB_SecMain { get; set; }        
    }
}

Code appsettings.json代码appsettings.json

   {
  "SectionMain": {
    "KeyA_SecMain": "KeyA_SecMain_Value",
    "KeyB_SecMain": "KeyB_SecMain_Value"
  }
}

Code ReadWriteAppSettings.cs代码ReadWriteAppSettings.cs

using Microsoft.Extensions.Configuration;           
using System.IO;                                    

namespace ConsoleAppCore
{
    class ReadWriteAppSettings
    {
        /// <summary>
        /// Read GetSection AppSettings
        /// </summary>
        /// <returns></returns>
        public string ReadGetSectionAppSettings()
        {
            var builder = new ConfigurationBuilder()
                            .SetBasePath(Directory.GetCurrentDirectory())
                            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

            IConfigurationRoot configuration = builder.Build();

            string result = configuration.GetSection("SectionMain:KeyA_SecMain").Value;

            return result;
        }


        /// <summary>
        /// Bind AppSettings
        /// </summary>
        /// <returns></returns>
        public void BindAppSettings()
        {
            AppSettings appSettings = new AppSettings();

            var builder = new ConfigurationBuilder()
                            .SetBasePath(Directory.GetCurrentDirectory())
                            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

            var configuration = builder.Build();

            var configurationResult = configuration.GetSection("SectionMain");

            ConfigurationBinder.Bind(configurationResult, appSettings);

            string result_KeyA_Sec1 = appSettings.KeyA_SecMain;
            string result_KeyB_Sec1 = appSettings.KeyB_SecMain;            
        }        
    }
}

Code Program.cs代码程序.cs

namespace ConsoleAppCore
{
    class Program
    {
        static void Main(string[] args)
        {            
            ReadGetSectionAppSettings();
            BindAppSettings();            
        }        

        static public string ReadGetSectionAppSettings()
        {
            ReadWriteAppSettings readWriteAppSettings = new ReadWriteAppSettings();
            string str = readWriteAppSettings.ReadGetSectionAppSettings();

            return str;
        }

        static public void BindAppSettings()
        {
            ReadWriteAppSettings readWriteAppSettings = new ReadWriteAppSettings();
            readWriteAppSettings.BindAppSettings();
        }

    }
}

I use this helper class.我使用这个助手类。 Class writes setting to appsettings.json file in /bin folder.类将设置写入 /bin 文件夹中的 appsettings.json 文件。 If you need another path just modify path to appsettings.json file.如果您需要其他路径,只需修改 appsettings.json 文件的路径即可。

public static class SettingsHelpers
{
    public static void AddOrUpdateAppSetting<T>(string sectionPathKey, T value)
    {
        try
        {
            var filePath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
            string json = File.ReadAllText(filePath);
            dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

            SetValueRecursively(sectionPathKey, jsonObj, value);

            string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
            File.WriteAllText(filePath, output);

        }
        catch (Exception ex)
        {
            Console.WriteLine("Error writing app settings | {0}", ex.Message);
        }
    }

    private static void SetValueRecursively<T>(string sectionPathKey, dynamic jsonObj, T value)
    {
        // split the string at the first ':' character
        var remainingSections = sectionPathKey.Split(":", 2);

        var currentSection = remainingSections[0];
        if (remainingSections.Length > 1)
        {
            // continue with the procress, moving down the tree
            var nextSection = remainingSections[1];
            SetValueRecursively(nextSection, jsonObj[currentSection], value);
        }
        else
        {
            // we've got to the end of the tree, set the value
            jsonObj[currentSection] = value;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 .Net 核心控制台应用程序从 appsettings.json 读取部分? - How to read a section from appsettings.json using .Net core console application? 如何在使用 .NET Core 的控制台应用程序中从 appsettings.json 获取值? - How to get values from appsettings.json in a console application using .NET Core? 如何在 asp.net 核心控制台应用程序中的 class 程序中的 appsettings.json 中获取价值 - How to get value from appsettings.json in Program class in asp.net core console application 如何在 a.Net 6 控制台应用程序中读取 appsettings.json? - How can I read the appsettings.json in a .Net 6 console application? 如何在控制台应用程序中添加 appsettings.json - How to add a appsettings.json in a console application .NET Core 3.1 从 appsettings.json 为控制台应用程序加载配置 - .NET Core 3.1 loading config from appsettings.json for console application 在 .NET 核心控制台应用程序中将 appsettings.json 设置放入 class 类型的 object 中 - Getting appsettings.json settings into an object of class type in .NET Core console application appsettings.json 中的哨兵配置与 .Net Core 3 控制台应用程序中的 Serilog - Sentry configuration in appsettings.json with Serilog in .Net Core 3 Console App 如何从 .NET 核心中的 appsettings.json 读取部分值 - How to read section values from appsettings.json in .NET Core 如何在 .NET Core 的 appSettings.json 上配置 IdentiyServer 设置? - How to configure IdentiyServer settings on appSettings.json of .NET Core?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM