Как записать данные в appsettings. json в консольном приложении (. net Core)? - PullRequest
0 голосов
/ 24 марта 2020

Для чтения данных из appsettings.json Я использую ConfigurationBuilder, ConfigurationBinder.
ConfigurationBuilder, ConfigurationBinder, позволяющие читать данные из appsettings.json.

Вопросы:
- Как записать данные в appsettings.json в консольном приложении?
Можно ли записать данные в appsettings.json, используя ConfigurationBuilder, ConfigurationBinder ?
Или мне нужно использовать JsonConvert.DeserializeObject <Settings> (fileText) для записи данных в appsettings.json?
Другими словами, если вы используете JsonConvert.DeserializeObject, тогда я должен:
- прочитать данные appsettings.json;
- изменить данные в нужном разделе;
- сохранить данные в appsettings.json.

Понимаю ли я логику c работы с appsettings.json?

Изображение-1
enter image description here

Изображение-2
enter image description here

Код AppSettings.cs

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

Код appsettings. json

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

Код 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;            
        }        
    }
}

Код Program.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();
        }

    }
}

1 Ответ

0 голосов
/ 24 марта 2020

Я использую этот вспомогательный класс. Класс записывает настройки в appsettings. json файл в папке / bin. Если вам нужен другой путь, просто измените путь к appsettings. json file.

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...