From 8efdfcd5f02a17dba5074e9a16d7da9aa58ac823 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Fri, 24 Apr 2020 07:05:22 -0600 Subject: [PATCH] Fix serialization of IPaths --- Wabbajack.Common/Json.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Wabbajack.Common/Json.cs b/Wabbajack.Common/Json.cs index a6600108..c4708842 100644 --- a/Wabbajack.Common/Json.cs +++ b/Wabbajack.Common/Json.cs @@ -9,6 +9,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Wabbajack.Common.Serialization.Json; using File = Alphaleonis.Win32.Filesystem.File; +using Path = Alphaleonis.Win32.Filesystem.Path; namespace Wabbajack.Common { @@ -23,6 +24,7 @@ namespace Wabbajack.Common new FullPathConverter(), new GameConverter(), new PercentConverter(), + new IPathConverter(), }; public static JsonSerializerSettings JsonSettings => @@ -233,6 +235,28 @@ namespace Wabbajack.Common return game.Game; } } + + public class IPathConverter : JsonConverter + { + public override void WriteJson(JsonWriter writer, IPath value, JsonSerializer serializer) + { + writer.WriteValue(Enum.GetName(typeof(Game), value)); + } + + public override IPath ReadJson(JsonReader reader, Type objectType, IPath existingValue, + bool hasExistingValue, + JsonSerializer serializer) + { + // Backwards compatibility support + var str = reader.Value?.ToString(); + if (string.IsNullOrWhiteSpace(str)) return default(RelativePath); + + if (Path.IsPathRooted(str)) + return (AbsolutePath)str; + return (RelativePath)str; + + } + }