**
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" ]
}
}
总结
不管需要什么文件的数据,到得底层都是文本读写,我们只不过是需要将文本里的内容读取出来,通过不同的编码或者处理而已。