是否可以将一个受歧视的联盟写入MongoDB?

时间:2017-03-20 22:25:55

标签: mongodb f#

运行以下代码:

type Test = 
  | L of int
  | M of string
  | N of bool

let client = new MongoClient("mongodb://localhost:27017")
let _db = client.GetDatabase("TestDB")
let collection = _db.GetCollection<Test>("TestLog")

collection.InsertOne(L 22)

我将以下内容插入我的收藏中:

_id: ObjectID('58d054f79a91e00c8379ab82')
_t: "L"

所以看起来Mongo的.NET驱动程序不知道如何处理受歧视的联盟。我已经看到了一些库,但它们已经很老了,我想检查一下框架中没有内置任何东西。我尝试的另一件事是使用Newtonsoft的JSON序列化器,如下所示:

let Json = JsonConvert.SerializeObject(L 22)
let doc = BsonSerializer.Deserialize<BsonDocument>(Json)

它将所有东西都输入到数据库中,但它们都是字符串类型而不是它们应该的类型(在本例中为int)。

1 个答案:

答案 0 :(得分:0)

NamelessInteractive.FSharp序列化库可以非常有效地处理这个问题。它与被区分的联合,记录类型,记录类型中嵌入的有区别的联合等非常好地工作(并保留类型)。