From 578490a1a94aba23eb403e94b6adcef37eab1829 Mon Sep 17 00:00:00 2001 From: Daniel Gerlag Date: Tue, 28 Nov 2017 20:01:54 -0800 Subject: [PATCH] mongo data object format --- .../Services/DataObjectSerializer.cs | 23 ++++++++++++------- .../Services/MongoPersistenceProvider.cs | 4 ---- src/samples/WorkflowCore.Sample04/Program.cs | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/providers/WorkflowCore.Persistence.MongoDB/Services/DataObjectSerializer.cs b/src/providers/WorkflowCore.Persistence.MongoDB/Services/DataObjectSerializer.cs index f9b1fb471..f073f45f2 100644 --- a/src/providers/WorkflowCore.Persistence.MongoDB/Services/DataObjectSerializer.cs +++ b/src/providers/WorkflowCore.Persistence.MongoDB/Services/DataObjectSerializer.cs @@ -1,5 +1,6 @@ using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; +using MongoDB.Bson; using System; using System.Collections.Generic; using System.Linq; @@ -14,20 +15,26 @@ namespace WorkflowCore.Persistence.MongoDB.Services public class DataObjectSerializer : SerializerBase { private static JsonSerializerSettings SerializerSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; - + public override object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) - { - var raw = BsonSerializer.Deserialize(context.Reader); - var result = JsonConvert.DeserializeObject(raw, SerializerSettings); - return result; + { + if (context.Reader.CurrentBsonType == BsonType.String) + { + var raw = BsonSerializer.Deserialize(context.Reader); + return JsonConvert.DeserializeObject(raw, SerializerSettings); + } + + return BsonSerializer.Deserialize(context.Reader, typeof(object)); } public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) { string str = JsonConvert.SerializeObject(value, SerializerSettings); - BsonSerializer.Serialize(context.Writer, str); + var doc = BsonDocument.Parse(str); + var typeElem = doc.GetElement("$type"); + doc.InsertAt(0, new BsonElement("_t", typeElem.Value)); + doc.RemoveElement(typeElem); + BsonSerializer.Serialize(context.Writer, doc); } - - } } diff --git a/src/providers/WorkflowCore.Persistence.MongoDB/Services/MongoPersistenceProvider.cs b/src/providers/WorkflowCore.Persistence.MongoDB/Services/MongoPersistenceProvider.cs index aa3a6b3cc..53e41d493 100644 --- a/src/providers/WorkflowCore.Persistence.MongoDB/Services/MongoPersistenceProvider.cs +++ b/src/providers/WorkflowCore.Persistence.MongoDB/Services/MongoPersistenceProvider.cs @@ -26,10 +26,6 @@ public MongoPersistenceProvider(IMongoDatabase database) static MongoPersistenceProvider() { - //BsonSerializer.RegisterDiscriminatorConvention(typeof(WorkflowStep), new AssemblyQualifiedDiscriminatorConvention()); - //BsonSerializer.RegisterDiscriminatorConvention(typeof(Expression), new AssemblyQualifiedDiscriminatorConvention()); - //BsonSerializer.RegisterSerializer(new DataMappingSerializer()); - BsonClassMap.RegisterClassMap(x => { x.MapIdProperty(y => y.Id) diff --git a/src/samples/WorkflowCore.Sample04/Program.cs b/src/samples/WorkflowCore.Sample04/Program.cs index 97932b4e0..8c59d8687 100644 --- a/src/samples/WorkflowCore.Sample04/Program.cs +++ b/src/samples/WorkflowCore.Sample04/Program.cs @@ -26,7 +26,7 @@ public static void Main(string[] args) var initialData = new MyDataClass(); var workflowId = host.StartWorkflow("EventSampleWorkflow", 1, initialData).Result; - + Console.WriteLine("Enter value to publish"); string value = Console.ReadLine(); host.PublishEvent("MyEvent", workflowId, value);