using System.IO; using System.Text.Json; namespace WpfSample.Models { internal class DemoItem { public int Id { get; set; } = 1; public int Order { get; set; } = 1; public string Name { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public DemoItem Parent { get; set; } = DemoRoot.Root; public List Items { get; } = new List(); public List Messages { get; } = new List(); private IncrementNumberGenerator IncrementIdentify = new IncrementNumberGenerator(); public int NextId => IncrementIdentify.Value; public int NextOrder => Items.Count; static public DemoItem? Load(DemoItem parent, string path, string? name = null) { if (path == null || Directory.Exists(path) == false) { return null; } DirectoryInfo directoryInfo = new DirectoryInfo(path); if (name == null) { name = directoryInfo.Name; } if (parent == null) { parent = DemoRoot.Root; } DemoItem data = new DemoItem() { Name = name, Id = parent.NextId, Order = parent.NextOrder, Parent = parent, }; // 加载 文件 foreach (FileInfo messageFileInfo in directoryInfo.GetFiles("*.json")) { using StreamReader reader = new StreamReader(messageFileInfo.FullName); if (JsonSerializer.Deserialize(reader.ReadToEnd()) is DemoMessage message) { data.Messages.Add(message); } } // 加载 子元素 foreach (DirectoryInfo subItemDirectoryInfo in directoryInfo.GetDirectories()) { if (Load(data, subItemDirectoryInfo.FullName) is DemoItem subItem) { data.Items.Add(subItem); } } return data; } static public bool Save(DemoItem data, string path, bool overwrite = false) { if (path == null) { return false; } if (overwrite == false && (Directory.Exists(path) || File.Exists(path))) { return false; } if (overwrite == true && Directory.Exists(path)) { try { Directory.Delete(path, true); } catch { return false; } } if (overwrite == true && File.Exists(path)) { try { File.Delete(path); } catch { return false; } } try { Directory.CreateDirectory(path); } catch { return false; } // 保存 文件 foreach (DemoMessage message in data.Messages) { string messageFilePath = Path.Combine(path, $"{message.Name}.json"); try { using FileStream file = File.Create(messageFilePath); JsonSerializer.Serialize(file, message); } catch { continue; } } // 保存 子元素 foreach (DemoItem subItem in data.Items) { string subItemPath = Path.Combine(path, subItem.Name); if (Save(subItem, subItemPath, overwrite) == false) { } } return true; } } }