MongoDB BsonSerializer.反序列化并#

MongoDB BsonSerializer.反序列化并#,mongodb,f#,bson,Mongodb,F#,Bson,下面的代码段似乎正确地序列化了记录,但反序列化将字段设置为其默认值 open MongoDB.Bson open MongoDB.Bson.Serialization open System module BsonIssue = type MyData = { Id : ObjectId Time : DateTime } let serialize(data : MyData) =

下面的代码段似乎正确地序列化了记录,但反序列化将字段设置为其默认值

open MongoDB.Bson
open MongoDB.Bson.Serialization
open System

module BsonIssue = 

    type MyData =
        { 
            Id : ObjectId
            Time : DateTime
        }

    let serialize(data : MyData) =
        let doc = BsonDocument()
        BsonSerializer.Serialize<MyData>(new IO.BsonDocumentWriter(doc), data)
        doc

    let deserialize(doc : BsonDocument) =
        printfn "Attempting to deserialize %A" doc
        BsonSerializer.Deserialize<MyData>(doc)

    let data = { Id = ObjectId.GenerateNewId(); Time = DateTime.Now }
    printfn "The data: %A" data
    let serialized = serialize data
    printfn "After serialization: %A" serialized
    let deserialized = deserialize serialized
    printfn "After deserialization: %A" deserialized
提前感谢。

将以下内容添加到您的记录中:

[<CLIMutable>]
type MyData =
    { 
        Id : ObjectId
        Time : DateTime
    }
但是,请注意记录不能正确往返,因为
时间
值不同-至少在我的机器上是这样。两个小时的时差似乎可以解释为我目前比UTC早两个小时,因此我猜测BSON(反)序列化程序将所有
DateTime
值解释为UTC值

您应该使用以下方法来解决此问题:


非常感谢。有趣的是,我选择使用DateTime只是为了举例说明。这也很好。
[<CLIMutable>]
type MyData =
    { 
        Id : ObjectId
        Time : DateTime
    }
> 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;}
[<CLIMutable>]
type MyData =
    { 
        Id : ObjectId
        Time : DateTimeOffset
    }
> 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