C# 手把手教你写一个自己的Json文件读取帮助类

**

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" ]
	}
}

总结

  不管需要什么文件的数据,到得底层都是文本读写,我们只不过是需要将文本里的内容读取出来,通过不同的编码或者处理而已。

最后感谢大家的阅读,如有疑问,欢迎一起探讨!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值