using System;
using System.Collections.Generic;
using System.Reflection;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
namespace Dpz.Core.Infrastructure
{
public class DateBsonSerializer : SerializerBase<Date>, IBsonDocumentSerializer
{
public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Date value)
{
var utcTime = Date.ToDateTime(value).ToUniversalTime();
var timestamp = (long)(utcTime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc))
.TotalMilliseconds;
context.Writer.WriteDateTime(timestamp);
}
public override Date Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var timeString = BsonValueSerializer.Instance.Deserialize(context).ToString() ?? "1970-1-1";
var value = DateTime.Parse(timeString).ToUniversalTime();
return Date.ToDate(value);
}
public bool TryGetMemberSerializationInfo(string memberName, out BsonSerializationInfo serializationInfo)
{
serializationInfo = new BsonSerializationInfo(
null,
BsonValueSerializer.Instance,
typeof(BsonValue));
return true;
}
}
}