要从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.
我理解与 合作的逻辑appsettings.json吗?
代码AppSettings.cs
namespace ConsoleAppCore
{
class AppSettings
{
public string KeyA_SecMain { get; set; }
public string KeyB_SecMain { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
代码appsettings.json
{
"SectionMain": {
"KeyA_SecMain": "KeyA_SecMain_Value",
"KeyB_SecMain": "KeyB_SecMain_Value"
}
}
Run Code Online (Sandbox Code Playgroud)
代码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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码程序.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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我使用这个助手类。类将设置写入 /bin 文件夹中的 appsettings.json 文件。如果您需要其他路径,只需修改 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |