diff --git a/src/core/Elsa.Abstractions/Extensions/StateExtensions.cs b/src/core/Elsa.Abstractions/Extensions/StateExtensions.cs index 61bd41dee..fb147a728 100644 --- a/src/core/Elsa.Abstractions/Extensions/StateExtensions.cs +++ b/src/core/Elsa.Abstractions/Extensions/StateExtensions.cs @@ -14,7 +14,11 @@ namespace Elsa.Extensions public static T GetState(this JObject state, string key, Func defaultValue = null) { var item = state.GetValue(key, StringComparison.OrdinalIgnoreCase); - return item != null && item.Type != JTokenType.Null ? item.ToObject(Serializer) : defaultValue != null ? defaultValue() : default(T); + + if (item == null || item.Type == JTokenType.Null) + return defaultValue != null ? defaultValue() : default; + + return item.ToObject(Serializer); } public static T GetState(this JObject state, Type type, string key, Func defaultValue = null) diff --git a/src/core/Elsa.Core/Serialization/IWorkflowSerializerProvider.cs b/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializerProvider.cs similarity index 72% rename from src/core/Elsa.Core/Serialization/IWorkflowSerializerProvider.cs rename to src/core/Elsa.Abstractions/Serialization/IWorkflowSerializerProvider.cs index 9e08a4d1e..92309de2b 100644 --- a/src/core/Elsa.Core/Serialization/IWorkflowSerializerProvider.cs +++ b/src/core/Elsa.Abstractions/Serialization/IWorkflowSerializerProvider.cs @@ -1,9 +1,10 @@ -using Newtonsoft.Json; - -namespace Elsa.Serialization -{ - public interface IWorkflowSerializerProvider - { - JsonSerializer CreateJsonSerializer(); - } +using Newtonsoft.Json; + +namespace Elsa.Serialization +{ + public interface IWorkflowSerializerProvider + { + JsonSerializerSettings CreateJsonSerializerSettings(); + JsonSerializer CreateJsonSerializer(); + } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Serialization/WorkflowSerializerProvider.cs b/src/core/Elsa.Core/Serialization/WorkflowSerializerProvider.cs index 666466d7a..0dd0b4d6f 100644 --- a/src/core/Elsa.Core/Serialization/WorkflowSerializerProvider.cs +++ b/src/core/Elsa.Core/Serialization/WorkflowSerializerProvider.cs @@ -7,6 +7,15 @@ namespace Elsa.Serialization { public class WorkflowSerializerProvider : IWorkflowSerializerProvider { + public JsonSerializerSettings CreateJsonSerializerSettings() + { + return new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + ContractResolver = new CamelCasePropertyNamesContractResolver() + }.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); + } + public JsonSerializer CreateJsonSerializer() { var jsonSerializer = new JsonSerializer(); diff --git a/src/persistence/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs b/src/persistence/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs index 8a0c357b8..922478006 100644 --- a/src/persistence/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs +++ b/src/persistence/Elsa.Persistence.MongoDb/Serialization/JObjectSerializer.cs @@ -1,7 +1,10 @@ using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using NodaTime; +using NodaTime.Serialization.JsonNet; namespace Elsa.Persistence.MongoDb.Serialization { @@ -10,7 +13,9 @@ namespace Elsa.Persistence.MongoDb.Serialization public override JObject Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) { var document = BsonDocumentSerializer.Instance.Deserialize(context); - return JObject.Parse(document.ToString()); + var settings = new JsonSerializerSettings().ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); + + return JsonConvert.DeserializeObject(document.ToString(), settings); } public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, JObject value)