|
1 | | -using System.Collections.Generic; |
2 | | -using System.Xml; |
| 1 | +using System.Text; |
| 2 | + |
| 3 | +using Newtonsoft.Json; |
| 4 | + |
| 5 | +using NLog; |
3 | 6 |
|
4 | 7 | namespace LogExpert.Core.Classes.Persister; |
5 | 8 |
|
6 | 9 | public static class ProjectPersister |
7 | 10 | { |
| 11 | + private static readonly Logger _logger = LogManager.GetCurrentClassLogger(); |
| 12 | + |
8 | 13 | #region Public methods |
9 | 14 |
|
10 | | - public static ProjectData LoadProjectData(string projectFileName) |
| 15 | + public static ProjectData LoadProjectData (string projectFileName) |
11 | 16 | { |
12 | | - ProjectData projectData = new(); |
13 | | - XmlDocument xmlDoc = new(); |
14 | | - xmlDoc.Load(projectFileName); |
15 | | - var fileList = xmlDoc.GetElementsByTagName("member"); |
16 | | - foreach (XmlNode fileNode in fileList) |
| 17 | + try |
17 | 18 | { |
18 | | - var fileElement = fileNode as XmlElement; |
19 | | - var fileName = fileElement.GetAttribute("fileName"); |
20 | | - projectData.MemberList.Add(fileName); |
21 | | - } |
| 19 | + var settings = new JsonSerializerSettings |
| 20 | + { |
| 21 | + Formatting = Formatting.Indented, |
| 22 | + }; |
22 | 23 |
|
23 | | - var layoutElements = xmlDoc.GetElementsByTagName("layout"); |
24 | | - if (layoutElements.Count > 0) |
| 24 | + var json = File.ReadAllText(projectFileName, Encoding.UTF8); |
| 25 | + return JsonConvert.DeserializeObject<ProjectData>(json, settings); |
| 26 | + } |
| 27 | + catch (Exception ex) when (ex is UnauthorizedAccessException or |
| 28 | + IOException) |
25 | 29 | { |
26 | | - projectData.TabLayoutXml = layoutElements[0].InnerXml; |
| 30 | + _logger.Error(ex, $"Error loading persistence data from {projectFileName}"); |
| 31 | + return new ProjectData(); |
27 | 32 | } |
28 | | - |
29 | | - return projectData; |
30 | 33 | } |
31 | 34 |
|
32 | | - |
33 | | - public static void SaveProjectData(string projectFileName, ProjectData projectData) |
| 35 | + public static void SaveProjectData (string projectFileName, ProjectData projectData) |
34 | 36 | { |
35 | | - XmlDocument xmlDoc = new(); |
36 | | - var rootElement = xmlDoc.CreateElement("logexpert"); |
37 | | - xmlDoc.AppendChild(rootElement); |
38 | | - var projectElement = xmlDoc.CreateElement("project"); |
39 | | - rootElement.AppendChild(projectElement); |
40 | | - var membersElement = xmlDoc.CreateElement("members"); |
41 | | - projectElement.AppendChild(membersElement); |
42 | | - SaveProjectMembers(xmlDoc, membersElement, projectData.MemberList); |
| 37 | + var settings = new JsonSerializerSettings |
| 38 | + { |
| 39 | + Formatting = Formatting.Indented, |
| 40 | + }; |
43 | 41 |
|
44 | | - if (projectData.TabLayoutXml != null) |
| 42 | + try |
45 | 43 | { |
46 | | - var layoutElement = xmlDoc.CreateElement("layout"); |
47 | | - layoutElement.InnerXml = projectData.TabLayoutXml; |
48 | | - rootElement.AppendChild(layoutElement); |
| 44 | + var json = JsonConvert.SerializeObject(projectData, settings); |
| 45 | + File.WriteAllText(projectFileName, json, Encoding.UTF8); |
49 | 46 | } |
50 | | - |
51 | | - xmlDoc.Save(projectFileName); |
52 | | - } |
53 | | - |
54 | | - #endregion |
55 | | - |
56 | | - #region Private Methods |
57 | | - |
58 | | - private static void SaveProjectMembers(XmlDocument xmlDoc, XmlNode membersNode, List<string> memberList) |
59 | | - { |
60 | | - foreach (var fileName in memberList) |
| 47 | + catch (Exception ex) when (ex is JsonSerializationException or |
| 48 | + UnauthorizedAccessException or |
| 49 | + IOException) |
61 | 50 | { |
62 | | - var memberElement = xmlDoc.CreateElement("member"); |
63 | | - membersNode.AppendChild(memberElement); |
64 | | - memberElement.SetAttribute("fileName", fileName); |
| 51 | + _logger.Error(ex, $"Error saving persistence data to {projectFileName}"); |
65 | 52 | } |
66 | 53 | } |
67 | 54 |
|
|
0 commit comments