using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
namespace Config
{
public class Configs
{
public static string GetConnectionValue(string Config)
{
//手动读取配置
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile(GetAbsolutePath("config/sqlserver.json"), optional: false, reloadOnChange: false);
IConfigurationRoot config = configBuilder.Build();
return config.GetSection("connectionStrings:"+Config).Value;
}
public static string GetConfigSettingsValue(string Key, string KeyTxt)
{
//手动读取配置
ConfigurationBuilder configBuilder = new ConfigurationBuilder();
configBuilder.AddJsonFile(GetAbsolutePath("config/settings.json"), optional: false, reloadOnChange: false);
IConfigurationRoot config = configBuilder.Build();
return KeyTxt!="" ? config.GetSection(Key+":"+KeyTxt).Value : config.GetSection(Key).Value;
}
#region 扩展
/// <summary>
/// 获取文件的绝对路径,针对window程序和web程序都可使用
/// </summary>
/// <param name="relativePath">相对路径地址</param>
/// <returns>绝对路径地址</returns>
public static string GetAbsolutePath(string relativePath)
{
string path = Directory.GetCurrentDirectory();
IConfigurationRoot configuration = new ConfigurationBuilder().SetBasePath(path).AddJsonFile("appsettings.json").Build();
if (string.IsNullOrEmpty(relativePath))
{
return "";
}
relativePath = relativePath.Replace("/", "\\");
if (relativePath[0] == '\\')
{
relativePath = relativePath.Remove(0, 1);
}
//使用path获取当前应用程序集的执行目录的上级的上级目录
string dir = ToBool(configuration["Debug"]) ? Path.GetFullPath("../../../") : path;
return Path.Combine(dir, relativePath);
}
public static bool SaveJson(Dictionary<string, object> sectionInfo, string configFileName)
{
if (sectionInfo.Count==0)
return false;
try
{
var filePath = GetAbsolutePath(configFileName);
JObject jsonObject;
if (File.Exists(filePath))
{
using (StreamReader file = new StreamReader(filePath))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
jsonObject = JObject.Parse(ToJson(JToken.ReadFrom(reader)));
}
}
}
else
{
jsonObject = new JObject();
}
foreach (var key in sectionInfo.Keys)
{
jsonObject[key] = JObject.FromObject(sectionInfo[key]);
}
using (var writer = new StreamWriter(filePath))
using (JsonTextWriter jsonwriter = new JsonTextWriter(writer)
{
Formatting = Formatting.Indented,//格式化缩进
Indentation = 4, //缩进四个字符
IndentChar = ' ' //缩进的字符是空格
})
{
jsonObject.WriteTo(jsonwriter);
return true;
}
}
catch (Exception)
{
return false;
}
}
#endregion
#region ToBool
/// <summary>
/// 转换为布尔值
/// </summary>
/// <param name="data">数据</param>
public static bool ToBool(object data)
{
if (data == null)
return false;
bool? value = GetBool(data);
if (value != null)
return value.Value;
bool result;
return bool.TryParse(data.ToString(), out result) && result;
}
/// <summary>
/// 获取布尔值
/// </summary>
/// <param name="data">数据</param>
/// <returns></returns>
private static bool? GetBool(object data)
{
switch (data.ToString().Trim().ToLower())
{
case "0":
return false;
case "1":
return true;
case "是":
return true;
case "否":
return false;
case "yes":
return true;
case "no":
return false;
default:
return null;
}
}
#endregion
#region ToJson
/// <summary>
/// 转成json字串
/// </summary>
/// <param name="obj">对象</param>
/// <returns></returns>
public static string ToJson(object obj)
{
IsoDateTimeConverter timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
return JsonConvert.SerializeObject(obj, timeConverter);
}
#endregion
}
}