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
}
}
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/17214704.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。
