Add [<CLIMutable>] to your entry:
[<CLIMutable>] type MyData = { Id : ObjectId Time : DateTime }
FSI session:
> let data = { Id = ObjectId.GenerateNewId(); Time = DateTime.Now };; val data : MyData = {Id = 55dea10c4bd766216837843d; Time = 27.08.2015 07:33:00;} > let serialized = serialize data;; val serialized : BsonDocument > let deserialized = deserialize serialized;; val deserialized : MyData = {Id = 55dea10c4bd766216837843d; Time = 27.08.2015 05:33:00;}
However, note that the record is not rounded to the right , because the Time values ββare different - at least on my machine. The two-hour time difference seems to be explained by the fact that I'm two hours earlier than UTC, so I assume the BSON (de) serializer interprets all DateTime values ββas UTC values.
You should solve this problem using DateTimeOffset :
[<CLIMutable>] type MyData = { Id : ObjectId Time : DateTimeOffset }
FSI session:
> let data = { Id = ObjectId.GenerateNewId(); Time = DateTimeOffset.Now };; val data : MyData = {Id = 55dea3534bd766216837843f; Time = 27.08.2015 07:42:43 +02:00;} > let serialized = serialize data;; val serialized : BsonDocument > let deserialized = deserialize serialized;; val deserialized : MyData = {Id = 55dea3534bd766216837843f; Time = 27.08.2015 07:42:43 +02:00;} > data = deserialized;; val it : bool = true
source share