From 434754e4661da144de0a146e2a11ea0f18d51907 Mon Sep 17 00:00:00 2001 From: James Doran Date: Thu, 16 Jan 2020 18:01:19 +1030 Subject: [PATCH] Fixed yaml serialisation and updated to YamlDotNet (#236) * Fixed Yaml serialisation/deserialisation Copied json serializer settings from JsonTokenFormatter, apart from CamelCasePropertyNamesContractResolver, as the yaml already had the correct case, and this would cause activity state (which has PascalCasing) to be camelCased too * Updated YamlDotNet.Standard to YamlDotNet Switched package as YamlDotNet.Standard has been unlisted on Nuget --- src/core/Elsa.Core/Elsa.Core.csproj | 3 +-- .../Formatters/YamlTokenFormatter.cs | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/core/Elsa.Core/Elsa.Core.csproj b/src/core/Elsa.Core/Elsa.Core.csproj index 24b689841..78ff5e6fe 100644 --- a/src/core/Elsa.Core/Elsa.Core.csproj +++ b/src/core/Elsa.Core/Elsa.Core.csproj @@ -43,8 +43,7 @@ - - + diff --git a/src/core/Elsa.Core/Serialization/Formatters/YamlTokenFormatter.cs b/src/core/Elsa.Core/Serialization/Formatters/YamlTokenFormatter.cs index 5b26f868f..8ddcfdf0e 100644 --- a/src/core/Elsa.Core/Serialization/Formatters/YamlTokenFormatter.cs +++ b/src/core/Elsa.Core/Serialization/Formatters/YamlTokenFormatter.cs @@ -1,7 +1,9 @@ -using System.Dynamic; +using System.Dynamic; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; +using NodaTime; +using NodaTime.Serialization.JsonNet; using YamlDotNet.Serialization; namespace Elsa.Serialization.Formatters @@ -9,15 +11,22 @@ namespace Elsa.Serialization.Formatters public class YamlTokenFormatter : ITokenFormatter { public const string FormatName = "YAML"; - private readonly ExpandoObjectConverter expandoObjectConverter; - private readonly Serializer serializer; - private readonly Deserializer deserializer; + private readonly ISerializer serializer; + private readonly IDeserializer deserializer; + private readonly JsonSerializerSettings jsonSerializerSettings; public YamlTokenFormatter() { - expandoObjectConverter = new ExpandoObjectConverter(); serializer = new SerializerBuilder().Build(); deserializer = new DeserializerBuilder().Build(); + + jsonSerializerSettings = new JsonSerializerSettings { + NullValueHandling = NullValueHandling.Ignore, + }; + + jsonSerializerSettings + .ConfigureForNodaTime(DateTimeZoneProviders.Tzdb) + .Converters.Add(new ExpandoObjectConverter()); } public string Format => FormatName; @@ -26,15 +35,16 @@ namespace Elsa.Serialization.Formatters public string ToString(JToken token) { var json = token.ToString(Formatting.None); - var expandoObject = JsonConvert.DeserializeObject(json, expandoObjectConverter); + var expandoObject = JsonConvert.DeserializeObject(json, jsonSerializerSettings); return serializer.Serialize(expandoObject); } public JToken FromString(string data) { var expandoObject = deserializer.Deserialize(data); - var json = JsonConvert.SerializeObject(expandoObject); - return JToken.Parse(json); + var json = JsonConvert.SerializeObject(expandoObject, jsonSerializerSettings); + + return JsonConvert.DeserializeObject(json, jsonSerializerSettings); } } } \ No newline at end of file