From 9f226e185e6d5ffc44982ae351d5e8f08563df4a Mon Sep 17 00:00:00 2001 From: Steve Wagner Date: Fri, 21 May 2010 07:48:07 +0200 Subject: [PATCH] Extend the BsonWriter to write TimeSpan as Ticks (which is its minimal unit). --- source/MongoDB.Tests/UnitTests/Bson/TestBsonWriter.cs | 10 ++++++++++ source/MongoDB/Bson/BsonWriter.cs | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/source/MongoDB.Tests/UnitTests/Bson/TestBsonWriter.cs b/source/MongoDB.Tests/UnitTests/Bson/TestBsonWriter.cs index 0348b763..d6363669 100644 --- a/source/MongoDB.Tests/UnitTests/Bson/TestBsonWriter.cs +++ b/source/MongoDB.Tests/UnitTests/Bson/TestBsonWriter.cs @@ -200,5 +200,15 @@ public void TestWriteBytesAsBinary() Assert.AreEqual("FwAAAAVieXRlcwAGAAAAAgIAAAAKDAA=",bson); } + + [Test] + public void TestWriteTimeSpanAsTicks() + { + var span = TimeSpan.FromSeconds(123456); + + var bson = Serialize(new Document("span", span)); + + Assert.AreEqual("EwAAABJzcGFuAACggnEfAQAAAA==",bson); + } } } \ No newline at end of file diff --git a/source/MongoDB/Bson/BsonWriter.cs b/source/MongoDB/Bson/BsonWriter.cs index 60608407..7a818c3f 100644 --- a/source/MongoDB/Bson/BsonWriter.cs +++ b/source/MongoDB/Bson/BsonWriter.cs @@ -68,7 +68,10 @@ public void WriteValue(BsonType type, Object obj) _writer.Write((int)obj); return; case BsonType.Long: - _writer.Write((long)obj); + if(obj is TimeSpan) + _writer.Write(((TimeSpan)obj).Ticks); + else + _writer.Write((long)obj); return; case BsonType.Date: Write((DateTime)obj); @@ -579,6 +582,8 @@ protected BsonType TranslateToBsonType(object obj) return BsonType.Oid; if(type == typeof(DateTime)) return BsonType.Date; + if(type == typeof(TimeSpan)) + return BsonType.Long; if(type == typeof(MongoRegex)) return BsonType.Regex; if(type == typeof(DBRef))