Skip to content

Instantly share code, notes, and snippets.

@niik

niik/BsonTest.cs Secret

Created May 21, 2013 21:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niik/09047dd5bf035359be57 to your computer and use it in GitHub Desktop.
Save niik/09047dd5bf035359be57 to your computer and use it in GitHub Desktop.
BSON default DateTime serialization / deserialization behavior
using System;
using System.Diagnostics;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Bson;
namespace bsontest
{
class Program
{
static void Main(string[] args)
{
var d1 = new DateTime(2013, 5, 21, 23, 30, 0, 250, DateTimeKind.Unspecified).AddTicks(1);
var d2 = new DateTime(2013, 5, 21, 23, 30, 0, 250, DateTimeKind.Utc).AddTicks(1);
var d3 = new DateTime(2013, 5, 21, 23, 30, 0, 250, DateTimeKind.Local).AddTicks(1);
foreach (var dt in new[] { d1, d2, d3 })
{
var ms = new MemoryStream();
var orig = new Tuple<DateTime>(dt);
var serializer = JsonSerializer.Create(new JsonSerializerSettings());
var writer = new BsonWriter(ms);
var reader = new BsonReader(ms);
Debug.Assert(writer.DateTimeKindHandling == reader.DateTimeKindHandling);
serializer.Serialize(writer, orig);
ms.Position = 0;
var deserialized = (Tuple<DateTime>)serializer.Deserialize(reader, typeof(Tuple<DateTime>));
Console.WriteLine(
"Original: {0:yyyy-MM-dd HH:mm:ss.ffff} / {1} ({2})",
orig.Item1,
orig.Item1.Ticks,
orig.Item1.Kind);
Console.WriteLine(
"Deserialized: {0:yyyy-MM-dd HH:mm:ss.ffff} / {1} ({2})",
deserialized.Item1,
deserialized.Item1.Ticks,
deserialized.Item1.Kind
);
Console.WriteLine();
Debug.Assert(orig.Item1 == deserialized.Item1);
Debug.Assert(orig.Item1.Kind == deserialized.Item1.Kind);
}
}
}
}
Original: 2013-05-21 23:30:00.2500 / 635047758002500001 (Unspecified)
Deserialized: 2013-05-21 23:30:00.2500 / 635047758002500000 (Local)
Original: 2013-05-21 23:30:00.2500 / 635047758002500001 (Utc)
Deserialized: 2013-05-22 01:30:00.2500 / 635047830002500000 (Local)
Original: 2013-05-21 23:30:00.2500 / 635047758002500001 (Local)
Deserialized: 2013-05-21 23:30:00.2500 / 635047758002500000 (Local)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment