[英]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
读取数据,我使用ConfigurationBuilder
、 ConfigurationBinder
。
ConfigurationBuilder
, ConfigurationBinder
allow you to read data from appsettings.json
. ConfigurationBuilder
和ConfigurationBinder
允许你从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
?我可以使用
ConfigurationBuilder
、 ConfigurationBinder
将数据写入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
的逻辑吗?
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.