将BsonDocument反序列化为POCO时的属性为null - mongo .net核心驱动程序

问题描述 投票:-1回答:2

我创建了一个POCO,我正在尝试从mongodb序列化它显然我创建了我的类相同的Mongo元素

我只使用这段代码

            MongoClient client = new MongoClient("mongodb://ip:port");
            IMongoDatabase database = client.GetDatabase("envbas");
            BsonClassMap.RegisterClassMap<Life>(cm => 
            {
              cm.AutoMap();
              cm.SetIgnoreExtraElements(true);

            });
            var filter = Builders<Life>.Filter.Eq(life => life.Fl_status, "A");
            var lives = database.GetCollection<Life>("lives").Find(filter).ToList();

使用此代码,它在生命变量(List)上向我返回0行

当我尝试使用BsonDocument类型查找所有元素时,它只返回一些东西

var lives = database.GetCollection<BsonDocument>("lives").Find(new BsonDocument()).ToList();

但我需要将它转换为Life对象,所以我不能使用BsonDocument类

mongodb asp.net-core .net-core asp.net-core-2.0
2个回答
2
投票

通过使用cm.SetIgnoreExtraElements(true);

您需要定义此Fl_status:

[BsonIgnoreExtraElements]
public class Life
{
    [BsonElement("fl_status")]
    public string Fl_status { get; set; }
}

或者你可以删除BsonClassMap.RegisterClassMap<Life>,并使用这个过滤器:

var filter = Builders<BsonDocument>.Filter.Eq("Fl_status", "A");

0
投票

我只需要在我的属性类中添加一些符号

我的POCO

[BsonIgnoreExtraElements]
    public class Life
    {
        [BsonId]
        [BsonElement("")]
        public ObjectId Id { get; set; }

        //public ObjectId __v { get; set; }

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

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

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

        [BsonElement("cd_interno_funcao")]
        public string Cd_interno_funcao { get; set; }
        [...]
    }

我的最终代码

 MongoClient client = new MongoClient("mongodb://ip:port");
 IMongoDatabase database = client.GetDatabase("envbas");
 var filter = Builders<Life>.Filter.Eq("fl_status", "Ativo"); //Eq("Mongo propertie", "value")
 var lives = database.GetCollection<Life>("lives").Find(filter).ToListAsync().GetAwaiter().GetResult();

现在我可以在我的生活变量中获得一个列表。我想如果你想使用符号的Fluent API,你可以使用mapping

BsonClassMap.RegisterClassMap<MyClass>(cm => 
{
    cm.MapMember(c => c.SomeProperty);
    cm.MapMember(c => c.AnotherProperty);
});
© www.soinside.com 2019 - 2024. All rights reserved.