using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; using DPumpHydr.WinFrmUI.WenSkin.DLL; using DPumpHydr.WinFrmUI.WenSkin.Json; using DPumpHydr.WinFrmUI.WenSkin.Json.Linq; namespace DPumpHydr.WinFrmUI.WenSkin.WenJsonConfig { public class JsonConfig { public JsonConfig() : this("WenAutoConfig") { } public JsonConfig(string jsonFileName) { Path = Application.StartupPath; JsonFileName = jsonFileName; Load(); } public JsonConfig(string path,string jsonFileName) { this.Path = path; JsonFileName = jsonFileName; Load(); } #region 私有属性 private JsonConfigGroupList groups; #endregion #region 公有属性 public string JsonFileName { get;private set; } public string Path { get;private set; } public JsonConfigGroupList Groups => groups ??= new JsonConfigGroupList(); public JsonConfigGroup this[string str] => Groups[str]; public string this[string group, string val] { get => Groups[group, val]; set => Groups[group, val] = value; } #endregion //打开配置文件 public void Load() { string path = $"{this.Path}\\{JsonFileName}.json"; Load(path); } public void Load(string path) { if (!File.Exists(path)) Save(); string str = File.ReadAllText(path); groups = JsonConvert.DeserializeObject(str); //将加密数据解密 Enc(groups); void Enc(JsonConfigGroupList groups) { foreach (var g in groups) { if (g.Groups.Count > 0) Enc(g.Groups); foreach (var item in g.Items) { if (item.Ecc) { item.Value = item.Value?.ToAESDecrypt(); } } } } } //保存文件 public void Save() { string path = $"{this.Path}\\{JsonFileName}.json"; Save(path); } public void Save(string path) { var js = new JsonConfigGroupList(); //加密存储数据 OutData(this.Groups, js); static void OutData(JsonConfigGroupList groups, JsonConfigGroupList owner) { foreach (var g in groups) { JsonConfigGroup jsonConfigGroup = new JsonConfigGroup(owner) { Name = g.Name, AllowAdd = g.AllowAdd, Info = g.Info, Visible = g.Visible, }; owner.Add(jsonConfigGroup); foreach (var item in g.Items) { JsonConfigItem jsonConfigItem = new JsonConfigItem(jsonConfigGroup.Items) { ComboBox = item.ComboBox, Delete = item.Delete, Info = item.Info, Name = item.Name, ReadOnly = item.ReadOnly, Visible = item.Visible, Tip = item.Tip, Ecc = item.Ecc, }; jsonConfigItem.Items.AddRange(item.Items.ToArray()); if (item.Ecc) { jsonConfigItem.Value = item.Value?.ToAESEncrypt(); } else jsonConfigItem.Value = item.Value; jsonConfigGroup.Items.Add(jsonConfigItem); } if (g.Groups.Count > 0) OutData(g.Groups, jsonConfigGroup.Groups); } } var json = JsonConvert.SerializeObject(js, Formatting.Indented); if (!Directory.Exists(System.IO.Path.GetDirectoryName(path))) Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path)); File.WriteAllText(path, json); } public void Show() { new WenConfigForm(this).Show(); } public void ShowDialog() { new WenConfigForm(this).ShowDialog(); } public class JsonConfigGroupList : List { public JsonConfigGroup this[string str] => Find(a => a.Name.ToUpper() == str.ToUpper()); public string this[string group, string val] { get => Find(a => a.Name.ToUpper() == group.ToUpper())?.Items.Find(a => a.Name.ToUpper() == val.ToUpper())?.Value; set { if (Find(a => a.Name.ToUpper() == group.ToUpper()) is JsonConfigGroup item && item.Items.Find(a => a.Name.ToUpper() == val.ToUpper()) is JsonConfigItem im) { im.Value = value; } } } /// /// 新增组 /// /// 名称 /// 描述 /// 若存在是否继续新增 /// public JsonConfigGroup Add(string groupName, string info = "组", bool add = false) { if (Find(a => a.Name == groupName) is JsonConfigGroup group && !add) { return group; } else { group = new JsonConfigGroup(this) { Name = groupName, Info = info }; Add(group); return group; } } } public class JsonConfigGroup { private JsonConfigGroupList groups; private JsonConfigItemList items; private readonly JsonConfigGroupList owner; public JsonConfigGroup(JsonConfigGroupList owner) { this.owner = owner; Name = ""; Info = ""; AllowAdd = false; Visible = true; } public string Name { get; set; } public string Info { get; set; } public bool AllowAdd { get; set; } public bool Visible { get; set; } public JsonConfigItemList Items => items ??= new JsonConfigItemList(); public JsonConfigGroupList Groups => groups ??= new JsonConfigGroupList(); public void Remove() { owner.Remove(this); } } public class JsonConfigItem { private List items; private readonly JsonConfigItemList owner; public JsonConfigItem(JsonConfigItemList owner) { this.owner = owner; Name = ""; Info = ""; Ecc = false; ReadOnly = false; Delete = false; Value = ""; Tip = ""; Visible = true; } public string Name { get; set; } public string Info { get; set; } public bool Ecc { get; set; } public bool ReadOnly { get; set; } public bool Delete { get; set; } public string Value { get; set; } public string Tip { get; set; } public bool Visible { get; set; } public bool ComboBox { get; set; } public List Items => items ??= new List(); public void Remove() { owner.Remove(this); } } public class JsonConfigItemList : List { public JsonConfigItemList() { } public JsonConfigItem this[string str] => Find(a => a.Name.ToUpper() == str.ToUpper()); public JsonConfigItem Add(string itemName,string value,string info="项",bool ecc=false,bool readOnly=false) { JsonConfigItem item = new JsonConfigItem(this) { Name = itemName, Info = info, Ecc = ecc, ReadOnly = readOnly, Value = value, }; this.Add(item); return item; } } } }