将BsonArray映射到列表<>;在POCO中
本文关键字:POCO gt lt 映射 列表 BsonArray | 更新日期: 2023-09-27 18:29:48
我使用本教程学习如何将Mongo数据库中的文档映射到POCO对象。
我的文档设置如下:
{
"VehicleEntry" : [
{
"BatteryStatus" : "GOOD",
"VehicleStatus" : "PASSED"
},
{
"BatteryStatus" : "GOOD",
"VehicleStatus" : "PASSED"
}
],
"project_id" : "1234"
}
要注意的主要一点是,我在每个文档中都有一个名为VehicleEntry的数组。我已经设置了POCO来匹配这样的文档:
public class VehicleEntry : MongoEntity
{
[BsonElement("@Date")]
public String Date { get; set; }
[BsonElement("@Time")]
public String Time { get; set; }
[BsonElement("@Vin")]
public String Vin { get; set; }
[BsonElement("@Year")]
public String Year { get; set; }
[BsonElement("@Body")]
public String Body { get; set; }
[BsonExtraElements]
public BsonDocument ExtraElements { get; set; }
}
public class VehicleDataUpload : MongoEntity
{
public VehicleDataUpload()
{
VehicleEntries = new List<VehicleEntry>();
}
[BsonElement("project_id")]
public String ProjectId { get; set; }
[BsonElement("VehicleEntry")]
public List<VehicleEntry> VehicleEntries { get; set; }
[BsonExtraElements]
public BsonDocument ExtraElements { get; set; }
}
为了测试这一点,我写了一行简单的代码,用来查找第一个具有给定项目标识符的文档:
var collection = database.GetCollection<VehicleDataUpload>("vehicleCollection");
var firstProj = collection.AsQueryable().Where(i => i.ProjectId.Equals("myProjIdentifier")).First();
然而,当我运行它时,我会得到以下异常:
附加信息:反序列化类CARSMongoTest.VehicleDataUpload的VehicleEntries属性时出错。无法从BsonType"Document"反序列化"List"。
我认为这是非常直接的,因为VehicleEntry
的类型无法转换为List<>
对象,但我不确定如何做到这一点。我有点困惑,为什么它在错误消息中说类型为"Document",而它应该将VehicleEntry
视为Array类型。
如何将数组映射到POCO的属性?
编辑我尝试过更改VehicleEntry,使其不从MongoEntity扩展,但错误仍然存在。
嗯,我意识到失败的原因是我端的一个错误。我们的大多数项目都会有多个vehicle条目,但碰巧我测试的那个项目在XML中只有一个,所以反序列化将其转换为Document,而不是BsonArray。
上面的代码会起作用,假设VehicleEntry
字段实际上是BsonArray类型,驱动程序会将其映射到List对象。