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