如何将 Bson 文档反序列化为 POCO?
How to deserialize a Bson document to a POCO?
我正在使用 Mongo .Net Driver 查询 MongoDB 数据库,我想将 returned Bson 文档映射到我的客户对象 Poco。
为了做到这一点,我从查询的 Bson 文档中创建了一个 LoadCustomers()
到 return 的反序列化客户列表。
在我的客户 POCO class 中,每个 属性 都标有 BsonElement
标签,这应该有助于 Bson 到对象的映射。
但是当我尝试使用 this answer 中的 FindAs<> 进行反序列化时,我收到一个编译器错误,指出没有这样的方法。
如何使用 MongoDB .Net 驱动程序 return MongoDB Bson 文档作为 POCO 列表?
这是我目前尝试的加载方法:
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; }
}
假设您使用的是最新的驱动程序,首先您必须获取集合,然后对集合进行查询。像这样
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;
}
如果你想 select 集合中的所有客户使用这样的东西:
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();
我正在使用 Mongo .Net Driver 查询 MongoDB 数据库,我想将 returned Bson 文档映射到我的客户对象 Poco。
为了做到这一点,我从查询的 Bson 文档中创建了一个 LoadCustomers()
到 return 的反序列化客户列表。
在我的客户 POCO class 中,每个 属性 都标有 BsonElement
标签,这应该有助于 Bson 到对象的映射。
但是当我尝试使用 this answer 中的 FindAs<> 进行反序列化时,我收到一个编译器错误,指出没有这样的方法。
如何使用 MongoDB .Net 驱动程序 return MongoDB Bson 文档作为 POCO 列表?
这是我目前尝试的加载方法:
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; }
}
假设您使用的是最新的驱动程序,首先您必须获取集合,然后对集合进行查询。像这样
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;
}
如果你想 select 集合中的所有客户使用这样的东西:
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();