From ea48910a69f2d58d1be2e215ac3946b583ef4ecc Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 18 Oct 2020 12:27:40 +0200 Subject: [PATCH] Configure YesSql with custom content serializer --- .../PersistenceServiceCollectionExtensions.cs | 4 ++-- .../Data/Services/CustomJsonContentSerializer.cs | 16 ++++++++++++++++ .../Elsa.Samples.DistributedLock/Program.cs | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/core/Elsa.Core/Data/Services/CustomJsonContentSerializer.cs diff --git a/src/core/Elsa.Core/Data/Extensions/PersistenceServiceCollectionExtensions.cs b/src/core/Elsa.Core/Data/Extensions/PersistenceServiceCollectionExtensions.cs index c1628b8b9..e7a392ccc 100644 --- a/src/core/Elsa.Core/Data/Extensions/PersistenceServiceCollectionExtensions.cs +++ b/src/core/Elsa.Core/Data/Extensions/PersistenceServiceCollectionExtensions.cs @@ -31,9 +31,9 @@ namespace Elsa.Data.Extensions IServiceProvider serviceProvider, Action configure) { - var configuration = new Configuration(); + var configuration = new Configuration { ContentSerializer = new CustomJsonContentSerializer() }; configure(serviceProvider, configuration); - + // TODO: The following line is a temporary workaround until the bug in YesSql is fixed: https://github.com/sebastienros/yessql/pull/280 var store = StoreFactory.CreateAndInitializeAsync(configuration).GetAwaiter().GetResult(); //var store = StoreFactory.Create(configuration); diff --git a/src/core/Elsa.Core/Data/Services/CustomJsonContentSerializer.cs b/src/core/Elsa.Core/Data/Services/CustomJsonContentSerializer.cs new file mode 100644 index 000000000..c16830bca --- /dev/null +++ b/src/core/Elsa.Core/Data/Services/CustomJsonContentSerializer.cs @@ -0,0 +1,16 @@ +using System; +using Newtonsoft.Json; +using NodaTime; +using NodaTime.Serialization.JsonNet; +using YesSql; + +namespace Elsa.Data.Services +{ + public class CustomJsonContentSerializer : IContentSerializer + { + private static readonly JsonSerializerSettings JsonSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); + public object? Deserialize(string content, Type type) => JsonConvert.DeserializeObject(content, type, JsonSettings); + public dynamic? DeserializeDynamic(string content) => JsonConvert.DeserializeObject(content, JsonSettings); + public string Serialize(object item) => JsonConvert.SerializeObject(item, JsonSettings); + } +} \ No newline at end of file diff --git a/src/samples/Elsa.Samples.DistributedLock/Program.cs b/src/samples/Elsa.Samples.DistributedLock/Program.cs index f0f60fde7..1d7ab16dc 100644 --- a/src/samples/Elsa.Samples.DistributedLock/Program.cs +++ b/src/samples/Elsa.Samples.DistributedLock/Program.cs @@ -24,7 +24,7 @@ namespace Elsa.Samples.DistributedLock { services .AddElsa(options => options - .UsePersistence(db => db.UseSqLite("Data Source=elsa2.db;Cache=Shared")) + .UsePersistence(db => db.UseSqLite("Data Source=elsa.db;Cache=Shared")) .UseRedisLockProvider("localhost:6379,abortConnect=false")) .AddConsoleActivities() .AddTimerActivities(options => options.Configure(timer => timer.SweepInterval = Duration.FromSeconds(5)))