-
-
Save niik/09047dd5bf035359be57 to your computer and use it in GitHub Desktop.
BSON default DateTime serialization / deserialization behavior
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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