繁体   English   中英

如何将Bson文档反序列化为POCO?

[英]How to deserialize a Bson document to a POCO?

我正在使用Mongo .Net Driver查询MongoDB数据库,我想将返回的Bson文档映射到我的Customer Object Poco。

为了做到这一点,我创建了一个LoadCustomers()来从查询的Bson文档中返回一个反序列化的客户列表。

在我的Customer POCO类中,每个属性都标有BsonElement标记,该标记应该有助于将Bson映射到Object。

但是当我尝试使用此答案中的FindAs <>反序列化时,我收到编译器错误,指出没有这样的方法。

如何使用MongoDB .Net驱动程序将MongoDB Bson文档作为POCO列表返回?

这是我目前对load方法的尝试:

    public static List<Customer> LoadCustomers()
    {
        var client = new MongoClient(connectionString);
        var database = client.GetDatabase("orders");
        //Get a handle on the customers collection:
        var docs = database.FindAs<Customer>("customers");
        return docs;            
    } 

以下是我的客户POCO,显示文档中的字段:

    public class Customer
    {
        /// <summary>
        /// This attribute is used to map the Id property to the ObjectId in the collection
        /// </summary>
        [BsonId]
        public ObjectId Id { get; set; }

        [BsonElement("firstName")]
        public string firstName { get; set; }

        [BsonElement("lastName")]
        public string lastName { get; set; }

        [BsonElement("email")]
        public string Email { get; set; }

    }

如果要选择集合中的所有客户,请使用以下内容:

var docs = await database.GetCollection<Customer>("customers").Find(new BsonDocument()).ToListAsync();

要通过id查询单个文档,应使用以下内容:

var filter = Builders<Customer>.Filter.Eq(c => c.Id, <ID>);
var result = await database.GetCollection<Customer>("customers").Find(filter).FirstOrDefaultAsync();

假设您使用的是最新的驱动程序,首先您必须获取该集合,然后对该集合进行查询。 像这样的东西

public static List<Customer> LoadCustomers()
{
    var client = new MongoClient(connectionString);
    var database = client.GetDatabase("orders");
    //Get a handle on the customers collection:
    var collection = database.GetCollection<Customer>("customers");
    var docs = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
    return docs;            
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM