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

问题描述 投票:0回答:1

假设这是 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 并在没有结构化类的情况下手动处理所有内容是不是一个更好的主意?

c# mongodb mongodb-.net-driver
1个回答
3
投票

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

我已尝试重现您的问题,但它在我的测试程序中运行良好。

上面测试程序插入的文件是这样的:

> db.test.find()
{ "_id" : ObjectId("5075fc6ee447ad1354c1f018"), "name" : "John Doe", "sub" : { "x" : 1, "y" : 2 } }
>
© www.soinside.com 2019 - 2024. All rights reserved.