Skip to content

Commit 468c423

Browse files
authored
Merge pull request #81 from danielgerlag/mongo-data-format
mongo data object format
2 parents 42c8233 + 578490a commit 468c423

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed
Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using MongoDB.Bson.Serialization;
22
using MongoDB.Bson.Serialization.Serializers;
3+
using MongoDB.Bson;
34
using System;
45
using System.Collections.Generic;
56
using System.Linq;
@@ -14,20 +15,26 @@ namespace WorkflowCore.Persistence.MongoDB.Services
1415
public class DataObjectSerializer : SerializerBase<object>
1516
{
1617
private static JsonSerializerSettings SerializerSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
17-
18+
1819
public override object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
19-
{
20-
var raw = BsonSerializer.Deserialize<string>(context.Reader);
21-
var result = JsonConvert.DeserializeObject(raw, SerializerSettings);
22-
return result;
20+
{
21+
if (context.Reader.CurrentBsonType == BsonType.String)
22+
{
23+
var raw = BsonSerializer.Deserialize<string>(context.Reader);
24+
return JsonConvert.DeserializeObject(raw, SerializerSettings);
25+
}
26+
27+
return BsonSerializer.Deserialize(context.Reader, typeof(object));
2328
}
2429

2530
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
2631
{
2732
string str = JsonConvert.SerializeObject(value, SerializerSettings);
28-
BsonSerializer.Serialize(context.Writer, str);
33+
var doc = BsonDocument.Parse(str);
34+
var typeElem = doc.GetElement("$type");
35+
doc.InsertAt(0, new BsonElement("_t", typeElem.Value));
36+
doc.RemoveElement(typeElem);
37+
BsonSerializer.Serialize(context.Writer, doc);
2938
}
30-
31-
3239
}
3340
}

src/providers/WorkflowCore.Persistence.MongoDB/Services/MongoPersistenceProvider.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ public MongoPersistenceProvider(IMongoDatabase database)
2626

2727
static MongoPersistenceProvider()
2828
{
29-
//BsonSerializer.RegisterDiscriminatorConvention(typeof(WorkflowStep), new AssemblyQualifiedDiscriminatorConvention());
30-
//BsonSerializer.RegisterDiscriminatorConvention(typeof(Expression), new AssemblyQualifiedDiscriminatorConvention());
31-
//BsonSerializer.RegisterSerializer(new DataMappingSerializer());
32-
3329
BsonClassMap.RegisterClassMap<WorkflowInstance>(x =>
3430
{
3531
x.MapIdProperty(y => y.Id)

src/samples/WorkflowCore.Sample04/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static void Main(string[] args)
2626

2727
var initialData = new MyDataClass();
2828
var workflowId = host.StartWorkflow("EventSampleWorkflow", 1, initialData).Result;
29-
29+
3030
Console.WriteLine("Enter value to publish");
3131
string value = Console.ReadLine();
3232
host.PublishEvent("MyEvent", workflowId, value);

0 commit comments

Comments
 (0)