专业做俄语网站建设司/天津seo排名公司
**
C# 手把手教你写一个自己的Json文件读取帮助类
**
前言
在.net core或者高版本的.net框架中,很多基础函数的用法已经给你封装的很好了,比如我们就可以配置后直接使用Configuration[‘property’]来获取json文件的内容。但是在一些老项目当中,你可能就用不了那些封装好的库了,你会为了读取一些json文件、xml文件而焦头烂额。
此时,我建议读一读这篇文章。
什么是Json文件,有什么作用
json文件通常在我们的一个项目中,用作一些参数的配置文件。因为在项目打包运行中,json文件不会被编译而是保留下来。在一些上线项目中,有事我们需要修改一些配置参数,比如国内国外,开关某个功能时,无疑会方便很多。
实现方式
实现,我们首先还是肯定要先使用系统接口文本IO将其读取出来,然后利用jObjet进行处理,最后json序列化或反序列化为自己想要的东西。
代码
加载json文件
/// <summary>/// Json文件工具类/// </summary>public class JsonHelper{protected string TextJson { get; set; }private string File { get; set; }protected JsonHelper(){}// 传入文件路径protected JsonHelper(string file){if (!System.IO.File.Exists(file)){throw new FileNotFoundException(file);}File = file;TextJson = System.IO.File.ReadAllText(file);}/// <summary>/// 加载json文件/// </summary>/// <param name="filePath">文件绝对路径</param>/// <returns>返回jsonHelper实例</returns>public static JsonHelper LoadJsonFile(string filePath){return new JsonHelper(filePath);}public JsonAppSetting AppSetting => new JsonAppSetting(File);}
通过JObject对象格式化json文件内容,索引器读取并返回结果
/// <summary>/// 读json/// </summary>public class JsonAppSetting : JsonHelper{private JObject JObject { get; set; }public JsonAppSetting(string _file) : base(_file){JObject = JObject.Parse(TextJson);}/// <summary>/// 读取json数据/// </summary>/// <param name="key">键值key 例子 A:B:C</param>/// <returns>返回对应键值的json数据</returns>public string this[string key]{get{var keyArray = key.Split(":".ToArray());var firstKey = keyArray.FirstOrDefault();var otherKey = keyArray.Skip(1);JToken jToken = JObject[firstKey];foreach (var item in otherKey){jToken = jToken[item];}return JsonConvert.SerializeObject(jToken);}}}
示例json文件,在项目根目录下,为appsettings.json
{"Translation": {"Baidu": {"Url": "https://fanyi-api.baidu.com/api/trans/vip/translate","AppId": "abc","Key": "cba"}},"ConnectionStrings": {"SoftDb": "Database=baseName;Server=ip;uid=uid;pwd=pwd"},"LocalUrl": "http://localhost:1234","EnableMaps": [ "baidu", "here", "gaode" ]
}
使用方法
你可以这样使用
// 外面包一层公用类,直接使用项目根目录+ appsettings.json固定文件
public class Common
{private static JsonHelper _jsonHelper;/// <summary>/// Json读取工具/// </summary>public static JsonHelper JsonHelper{get{if (_jsonHelper == null){var file = AppDomain.CurrentDomain.BaseDirectory + "appsettings.json";_jsonHelper = JsonHelper.LoadJsonFile(file);}return _jsonHelper;}}
}
public class test
{public void testFunc(){var localUrl = Common.JsonHelper.AppSetting["LocalUrl"]; //"http://localhost:1234"var softDb = Common.JsonHelper.AppSetting["ConnectionStrings:SoftDb"]; //"Database=baseName;Server=ip;uid=uid;pwd=pwd"var enableMap = JsonConvert.DeserializeObject<List<string>>(JsonHelper.AppSetting["EnableMaps"]);//列表[ "baidu", "here", "gaode" ]}
}
当然你也可以这样,自己指定路径
public class test
{public void testFunc(){var _jsonHelper = JsonHelper.LoadJsonFile(filePath);var localUrl = _jsonHelper.AppSetting["LocalUrl"]; //"http://localhost:1234"var softDb = _jsonHelper.AppSetting["ConnectionStrings:SoftDb"]; //"Database=baseName;Server=ip;uid=uid;pwd=pwd"var enableMap = JsonConvert.DeserializeObject<List<string>>(_jsonHelper.AppSetting["EnableMaps"]);//列表[ "baidu", "here", "gaode" ]}
}
总结
不管需要什么文件的数据,到得底层都是文本读写,我们只不过是需要将文本里的内容读取出来,通过不同的编码或者处理而已。