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

jxct1oxe  于 2023-04-20  发布在  Go
关注(0)|答案(1)|浏览(152)

假设这是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并手动处理所有事情而不使用结构化类是不是更好的主意?

col17t5w

col17t5w1#

我不认为你得到的错误信息是来自C#驱动程序。你能提供一个堆栈跟踪吗?
我已经尝试重现您的问题,但它与我的测试程序工作正常。
上面的测试程序插入的文档看起来像这样:

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

相关问题