一,定义配置文件类
csharp
public class SettingsDefine
{
public static SystemSettingClass SystemSetting = new SystemSettingClass();
public static DispensingCfgClass DispensingCfg = new DispensingCfgClass();
public class SystemSettingClass : JsonHelper
{
public string PortName = "COM1";
public string BaudRate = "9600";
}
public class DispensingCfgClass : JsonHelper
{
public string DisMode;
public string Preset;
}
private static string Path = Application.StartupPath.Replace("\\FSTW_New\\bin\\Debug", "") + "\\config";
public static void ReadParams()
{
SystemSetting.ReaderParams(Path, "SystemSetting", ref SystemSetting);
if (SystemSetting == null)
{
SystemSetting = new SystemSettingClass();
SystemSetting.ReadBufferDate(Path, "SystemSetting", ref SystemSetting);
}
SystemSetting.SetSaveFile(Path, "SystemSetting", SystemSetting);
DispensingCfg.ReaderParams(Path, "DispensingCfg", ref DispensingCfg);
if (DispensingCfg == null)
{
DispensingCfg = new DispensingCfgClass();
DispensingCfg.ReadBufferDate(Path, "DispensingCfg", ref DispensingCfg);
}
DispensingCfg.SetSaveFile(Path, "DispensingCfg", DispensingCfg);
}
}
二,JsonHelper
csharp
public class JsonHelper
{
private object locker = new object();
/// <summary>
/// 写入文件
/// </summary>
/// <param name="path"></param>
/// <param name="o"></param>
protected void ObjectToJsonFile(string path, object o)
{
try
{
string str = JsonConvert.SerializeObject(o);
File.WriteAllText(path, str);
}
catch (Exception ex)
{
MessageBox.Show($"写入配置文件失败!路径:{path}-信息{ex.Message}");
}
}
/// <summary>
/// 反序列化,文件转对象
/// </summary>
/// <param name="path"></param>
/// <param name="o"></param>
/// <returns></returns>
protected object JsonFileToObject(string path, object o)
{
string str = string.Empty;
object ret = null;
try
{
str = File.ReadAllText(path);
ret = JsonConvert.DeserializeObject(str, o.GetType());
}
catch (Exception ex)
{
MessageBox.Show($"读取配置文件失败!路径: {path}-信息:{ex.Message}");
return null;
}
return ret;
}
[JsonIgnore]
private string strsaveFile { get; set;}
[JsonIgnore]
private string strsaveFile1 {get; set;}
/// <summary>
/// 1.反序列化对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strBaseDic"></param>
/// <param name="fileName"></param>
/// <param name="objectTemp"></param>
public bool ReaderParams<T>(string strBaseDic, string fileName, ref T objectTemp)
{
#region
bool isResult = true;
try
{
if (!Directory.Exists(strBaseDic))
{
Directory.CreateDirectory(strBaseDic);
}
if (File.Exists(strBaseDic + "\\" + fileName + ".json"))
{
objectTemp = (T)JsonFileToObject(strBaseDic + "\\" + fileName + ".json", objectTemp);
}
else
{
ObjectToJsonFile(strBaseDic + "\\" + fileName + ".json", objectTemp);
isResult = false;
}
}
catch (Exception ex)
{
isResult = false;
//default 会返回指定类型的默认值
//引用类型(如类、接口、数组等)→ null
//值类型(如 int、double、bool 等)→ 0 或 false 等
//结构体 → 将所有字段设为其默认值的实例
objectTemp = default;
MessageBox.Show($"ReaderParams失败-路径:{strBaseDic + "\\" + fileName + ".json"}信息{ex.Message}");
}
return isResult;
#endregion
}
/// <summary>
/// 如果文件数据异常,则加载备用参数
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="strBaseDic"></param>
/// <param name="fileName"></param>
/// <param name="objectTemp"></param>
public void ReadBufferDate<T>(string strBaseDic, string fileName, ref T objectTemp)
{
DialogResult dlgResult = MessageBox.Show(strBaseDic + "\\" + fileName + ".json" + " 该文件数据存在异常,是否加载备用参数", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dlgResult == DialogResult.Yes)
{
objectTemp = (T)JsonFileToObject(strBaseDic + "开机备份\\" + fileName + ".json", objectTemp);
ObjectToJsonFile(strBaseDic + "\\" + fileName + ".json", objectTemp);
}
else
{
Environment.Exit(1);
Process.GetCurrentProcess().Kill();
}
}
/// <summary>
/// 3.设置文件路径,写入开机备份文件
/// </summary>
/// <param name="strBaseDic"></param>
/// <param name="fileName"></param>
public void SetSaveFile<T>(string strBaseDic, string fileName, T objectTemp)
{
strsaveFile = strBaseDic + "\\" + fileName + ".json";
strsaveFile1 = strBaseDic + "开机备份\\" + fileName + ".json";
if (!Directory.Exists(strBaseDic + "开机备份"))
{
Directory.CreateDirectory(strBaseDic + "开机备份");
}
ObjectToJsonFile(strBaseDic + "开机备份\\" + fileName + ".json", objectTemp);
}
/// <summary>
/// 写入配置文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objectTemp"></param>
public virtual void WriteParams<T>(T objectTemp)
{
lock (locker)
{
ObjectToJsonFile(strsaveFile, objectTemp);
}
}
/// <summary>
/// 将Json字符串转换成类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonstr"></param>
/// <param name="obj"></param>
/// <returns></returns>
public bool JsonStrToObject<T>(string jsonstr, ref T obj)
{
bool result = false;
try
{
obj = (T)JsonConvert.DeserializeObject(jsonstr, obj.GetType());
result = true;
}
catch
{
result = false;
}
return result;
}
}
三,使用方法
1.在主入口调用读取配置文件
csharp
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SettingsDefine.ReadParams();//读取配置文件,生成对象
Application.Run(new FormMain());
}
2.保存配置文件
csharp
SettingsDefine.DispensingCfg.WriteParams(SettingsDefine.DispensingCfg);
SettingsDefine.SystemSetting.WriteParams(SettingsDefine.SystemSetting);