c#读取json文件操作json文件
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 } }