Browse Source

Serialization fixed.

pull/248/head v1.2.0
Sebastian Stehle 9 years ago
parent
commit
3c8b7a082f
  1. 2
      src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs
  2. 35
      src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs
  3. 33
      src/Squidex.Infrastructure.MongoDb/MongoDb/JTokenSerializer.cs

2
src/Squidex.Infrastructure.MongoDb/EventSourcing/MongoEvent.cs

@ -26,7 +26,7 @@ namespace Squidex.Infrastructure.EventSourcing
public static MongoEvent FromEventData(EventData data) public static MongoEvent FromEventData(EventData data)
{ {
return new MongoEvent { Type = data.Type, Metadata = data.Metadata, Payload = data.ToString() }; return new MongoEvent { Type = data.Type, Metadata = data.Metadata, Payload = data.Payload.ToString() };
} }
public EventData ToEventData() public EventData ToEventData()

35
src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonSerializer.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using MongoDB.Bson;
using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers; using MongoDB.Bson.Serialization.Serializers;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -22,18 +23,38 @@ namespace Squidex.Infrastructure.MongoDb
this.serializer = serializer; this.serializer = serializer;
} }
protected override T DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{ {
var jsonReader = new BsonJsonReader(context.Reader); var bsonReader = context.Reader;
return serializer.Deserialize<T>(jsonReader); if (bsonReader.GetCurrentBsonType() == BsonType.Null)
{
bsonReader.ReadNull();
return null;
}
else
{
var jsonReader = new BsonJsonReader(bsonReader);
return serializer.Deserialize<T>(jsonReader);
}
} }
protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, T value) public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, T value)
{ {
var jsonWriter = new BsonJsonWriter(context.Writer); var bsonWriter = context.Writer;
serializer.Serialize(jsonWriter, value); if (value == null)
{
bsonWriter.WriteNull();
}
else
{
var jsonWriter = new BsonJsonWriter(bsonWriter);
serializer.Serialize(jsonWriter, value);
}
} }
} }
} }

33
src/Squidex.Infrastructure.MongoDb/MongoDb/JTokenSerializer.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using MongoDB.Bson;
using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers; using MongoDB.Bson.Serialization.Serializers;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@ -15,18 +16,38 @@ namespace Squidex.Infrastructure.MongoDb
{ {
public static readonly JTokenSerializer<T> Instance = new JTokenSerializer<T>(); public static readonly JTokenSerializer<T> Instance = new JTokenSerializer<T>();
protected override T DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) public override T Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{ {
var jsonReader = new BsonJsonReader(context.Reader); var bsonReader = context.Reader;
return (T)JToken.ReadFrom(jsonReader); if (bsonReader.GetCurrentBsonType() == BsonType.Null)
{
bsonReader.ReadNull();
return null;
}
else
{
var jsonReader = new BsonJsonReader(bsonReader);
return (T)JToken.ReadFrom(jsonReader);
}
} }
protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, T value) public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, T value)
{ {
var jsonWriter = new BsonJsonWriter(context.Writer); var bsonWriter = context.Writer;
if (value == null)
{
bsonWriter.WriteNull();
}
else
{
var jsonWriter = new BsonJsonWriter(bsonWriter);
value.WriteTo(jsonWriter); value.WriteTo(jsonWriter);
}
} }
} }
} }

Loading…
Cancel
Save