将BsonArray映射到List<>在POCO中

时间:2016-01-11 19:49:34

标签: c# mongodb

我正在使用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扩展,但错误仍然存​​在。

1 个答案:

答案 0 :(得分:0)

嗯,我意识到失败的原因是因为我的错误。我们的大多数项目都有多个车辆条目,但是我测试的那个项目只有一个在XML中,所以反序列化将它转换为Document而不是BsonArray。

上面的代码将起作用,假设VehicleEntry字段实际上是BsonArray类型,驱动程序会将其映射到List对象。