diff --git a/Aaru.CommonTypes b/Aaru.CommonTypes index 73730c4e0..24c8aa347 160000 --- a/Aaru.CommonTypes +++ b/Aaru.CommonTypes @@ -1 +1 @@ -Subproject commit 73730c4e0f3db793f0ae7f5009e0149087d7a3c8 +Subproject commit 24c8aa34768e97c4a59274d16b6f5f5d2c9ff982 diff --git a/Aaru.Console b/Aaru.Console index b5dcb2b05..72ff6760c 160000 --- a/Aaru.Console +++ b/Aaru.Console @@ -1 +1 @@ -Subproject commit b5dcb2b05881d73b4baccd873e620fbbd6374f21 +Subproject commit 72ff6760c11adf044d66ff7fc5919cc9abd1fb00 diff --git a/Aaru.Core/Devices/Dumping/Dump.cs b/Aaru.Core/Devices/Dumping/Dump.cs index d7e002aff..0be945ae4 100644 --- a/Aaru.Core/Devices/Dumping/Dump.cs +++ b/Aaru.Core/Devices/Dumping/Dump.cs @@ -36,7 +36,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -using System.Xml.Serialization; +using System.Text.Json; +using System.Text.Json.Serialization; using Aaru.CommonTypes; using Aaru.CommonTypes.Enums; using Aaru.CommonTypes.Interfaces; @@ -292,9 +293,21 @@ public partial class Dump if(File.Exists(_outputPrefix + ".resume.xml")) File.Delete(_outputPrefix + ".resume.xml"); - var fs = new FileStream(_outputPrefix + ".resume.xml", FileMode.Create, FileAccess.ReadWrite); - var xs = new XmlSerializer(_resume.GetType()); - xs.Serialize(fs, _resume); + if(File.Exists(_outputPrefix + ".resume.json")) + File.Delete(_outputPrefix + ".resume.json"); + + var fs = new FileStream(_outputPrefix + ".resume.json", FileMode.Create, FileAccess.ReadWrite); + + JsonSerializer.Serialize(fs, new ResumeJson + { + Resume = _resume + }, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + IncludeFields = true, + WriteIndented = true + }); + fs.Close(); } diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index 0a18fb69b..f1a805cbd 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -38,6 +38,8 @@ using System.IO; using System.Linq; using System.Reactive; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using System.Xml.Serialization; @@ -692,13 +694,32 @@ public sealed class MediaDumpViewModel : ViewModelBase async Task CheckResumeFile() { _resume = null; - var xs = new XmlSerializer(typeof(Resume)); try { - var sr = new StreamReader(_outputPrefix + ".resume.xml"); - _resume = (Resume)xs.Deserialize(sr); - sr.Close(); + if(File.Exists(_outputPrefix + ".resume.json")) + { + var fs = new FileStream(_outputPrefix + ".resume.json", FileMode.Open); + + _resume = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + IncludeFields = true, + WriteIndented = true + })?.Resume; + + fs.Close(); + } + + // DEPRECATED: To be removed in Aaru 7 + else if(File.Exists(_outputPrefix + ".resume.xml")) + { + var xs = new XmlSerializer(typeof(Resume)); + + var sr = new StreamReader(_outputPrefix + ".resume.xml"); + _resume = (Resume)xs.Deserialize(sr); + sr.Close(); + } } catch { diff --git a/Aaru/Commands/Media/Dump.cs b/Aaru/Commands/Media/Dump.cs index f3118b835..de92d9492 100644 --- a/Aaru/Commands/Media/Dump.cs +++ b/Aaru/Commands/Media/Dump.cs @@ -39,6 +39,8 @@ using System.Globalization; using System.IO; using System.Linq; using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading; using System.Xml.Serialization; using Aaru.CommonTypes; @@ -465,12 +467,31 @@ sealed class DumpMediaCommand : Command Resume resumeClass = null; var xs = new XmlSerializer(typeof(Resume)); - if(File.Exists(outputPrefix + ".resume.xml") && resume) + if(resume) + { try { - var sr = new StreamReader(outputPrefix + ".resume.xml"); - resumeClass = (Resume)xs.Deserialize(sr); - sr.Close(); + if(File.Exists(outputPrefix + "resume.json")) + { + var fs = new FileStream(outputPrefix + ".resume.json", FileMode.Open); + + resumeClass = JsonSerializer.Deserialize(fs, new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, + IncludeFields = true, + WriteIndented = true + })?.Resume; + + fs.Close(); + } + + // DEPRECATED: To be removed in Aaru 7 + else if(File.Exists(outputPrefix + ".resume.xml") && resume) + { + var sr = new StreamReader(outputPrefix + ".resume.xml"); + resumeClass = (Resume)xs.Deserialize(sr); + sr.Close(); + } } catch { @@ -481,6 +502,7 @@ sealed class DumpMediaCommand : Command return (int)ErrorNumber.InvalidResume; } + } if(resumeClass != null && resumeClass.NextBlock > resumeClass.LastBlock &&