我正在使用this tutorial来了解将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
视为数组类型。
如何将数组映射到POCO的属性?
修改 我已经尝试更改VehicleEntry,因此它不会从MongoEntity扩展,但错误仍然存在。
答案 0 :(得分:0)
嗯,我意识到失败的原因是因为我的错误。我们的大多数项目都有多个车辆条目,但是我测试的那个项目只有一个在XML中,所以反序列化将它转换为Document而不是BsonArray。
上面的代码将起作用,假设VehicleEntry
字段实际上是BsonArray类型,驱动程序会将其映射到List对象。