Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -14,20 +15,26 @@ namespace WorkflowCore.Persistence.MongoDB.Services
public class DataObjectSerializer : SerializerBase<object>
{
private static JsonSerializerSettings SerializerSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

public override object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var raw = BsonSerializer.Deserialize<string>(context.Reader);
var result = JsonConvert.DeserializeObject(raw, SerializerSettings);
return result;
{
if (context.Reader.CurrentBsonType == BsonType.String)
{
var raw = BsonSerializer.Deserialize<string>(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);
}


}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<WorkflowInstance>(x =>
{
x.MapIdProperty(y => y.Id)
Expand Down
2 changes: 1 addition & 1 deletion src/samples/WorkflowCore.Sample04/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down