反序列化嵌套&非结构化BsonDocument(mongodb c#驱动程序)

时间:2012-10-09 09:19:07

标签: c# mongodb mongodb-.net-driver

假设这是2个Bson文档的集合

{
    "_id": "...",
    "name": "Test1",
    "sub": {
        "street": "134 Fake Street",
        "city": "NoWhere"
    }
},
{
    "_id": "...",
    "name": "Test2",
    "sub": {
        "height": "10",
        "width": "20",
        "sub2": {
            "type": "something"
        }
    }
}

其中第一级是结构化类,但子级可以是完全非结构化的,并且可以进一步嵌套多个级别的文档。

如何将此文档反序列化为C#类?我看到的所有样本都假设嵌套文档中有一些结构。

以下类给出错误:

public class Report
{
    [BsonId]
    public ObjectId _id { get; set; }

    public string name { get; set; }

    public BsonDocument sub { get; set; }
}
  

不期望输入数据合约名称为“...”的“MongoDB.Bson.BsonString”。考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。

修改

我想要做的可能是完全无意义的。如果只使用一个BsonDocument并在没有结构化类的情况下手动处理所有内容,这是一个更好的主意吗?

1 个答案:

答案 0 :(得分:3)

我认为您收到的错误消息不是来自C#驱动程序。你能提供堆栈跟踪吗?

我已尝试重现您的问题,但它可以正常使用我的测试程序。参见:

http://pastie.org/5032283

上述测试程序插入的文档如下所示:

> db.test.find()
{ "_id" : ObjectId("5075fc6ee447ad1354c1f018"), "name" : "John Doe", "sub" : { "x" : 1, "y" : 2 } }
>