Json配置文件解析

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace A
{ /// <summary>
  /// json配置文件解析
  /// </summary>
    public sealed class JsonConfigHelper
    {
        private static JsonConfigHelper _root;
        private static Action _onLoadCompleted;
        /// <summary>
        /// 
        /// </summary>
        public static JsonConfigHelper Instance
        {
            get
            {
                if (_root == null)
                {
                    Interlocked.CompareExchange(ref _root, new JsonConfigHelper(), null);
                    _onLoadCompleted?.Invoke();
                }

                return _root;
            }
        }
        /// <summary>
        /// 基础参数配置
        /// </summary>
        private JObject _jConfig = null;

        private const string BasePath = "Config\\BaseConfig.json";

        private JsonConfigHelper()
        {
            _onLoadCompleted += LoadConfig;
        }

        private void LoadConfig()
        {
            if (!File.Exists(BasePath)) return;
            _jConfig = new JObject();
            using (StreamReader file = File.OpenText(BasePath))
            {
                using (JsonTextReader reader = new JsonTextReader(file))
                {
                    _jConfig = JObject.Load(reader);
                }
            };
        }

        #region 基本操作


        /// <summary>
        /// 获取 配置参数
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetConfigValue(string key)
        {
            var token = _jConfig?.SelectToken(key);
            if (token == null) return null;
            return Regex.Replace((token.ToString()), @"\s", "");
        }
        /// <summary>
        /// 获取指定键值
        /// </summary>
        /// <param name="key"></param>
        /// <param name="val"></param>
        /// <returns></returns>
        public bool TryGetConfigVal(string key, out string val)
        {
            val = GetConfigValue(key);
            return string.IsNullOrEmpty(val);
        }

        /// <summary>
        /// 返回指定对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objString"></param>
        /// <returns></returns>
        private T GetObject<T>(string objString) where T : class
        {
            if (_jConfig == null) return null;
            return JsonConvert.DeserializeObject<T>(objString);
        }

        /// <summary>
        /// 获取对象(key-> entity)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public T GetEntity<T>(string key) where T : class
        {
            return GetObject<T>(GetConfigValue(key));
        }
        #endregion

        #region 系统基本参数设置 settings

      
        #region 订阅业务推送的数据配置

        /// <summary>
        /// 终端是否使用消息队列接收业务数据
        /// </summary>
        public bool UseRabbitMq
        {
            get
            {
                var val = GetConfigValue("A.UseRabbitMq");
                return bool.TryParse(val, out var b) && b;
            }
        }

        #endregion


        #endregion

        #region 对象转换JOSN
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public string JsonData(object data)
        {
            return JsonConvert.SerializeObject(data);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public byte[] JsonData(string data)
        {
            return System.Text.Encoding.UTF8.GetBytes(data);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public byte[] JsonBytes(object data)
        {
            var json = JsonData(data);
            return JsonData(json);
        }

        #endregion
    }
}

posted @ 2023-03-14 13:56  码农阿亮  阅读(123)  评论(0)    收藏  举报