MongoDB C# IgnoreExtraElements 不适用于嵌套对象

问题描述 投票:0回答:1

有两类:

public class A {
   public IEnumerable<B> Items { get; set; }
}

public class B {
   public string A { get; set; }
   public int B { get; set; }
}

有A类的类图:

BsonClassMap.RegisterClassMap<A>(classMap =>
{
    classMap.AutoMap();
    classMap.SetIgnoreExtraElements(true);
});

问题:如果我的 B 对象在数据库中包含的属性多于我添加到类中的属性,则反序列化将由于属性未知而失败。调用“SetIgnoreExtraElements”对于嵌套对象没有帮助,为 B 类创建单独的类映射也不起作用。

我知道约定并且它解决了我的问题,但是有没有一种解决方法可以仅使用类映射来解决问题?

mongodb-.net-driver
1个回答
0
投票

您也应该为 B 类型指定

SetIgnoreExtraElements
。你可以这样做:

        BsonClassMap.RegisterClassMap<A>(classMap =>
        {
            classMap.AutoMap();
            classMap.SetIgnoreExtraElements(true);
        });

        BsonClassMap.RegisterClassMap<B>(classMap =>
        {
            classMap.AutoMap();
            classMap.SetIgnoreExtraElements(true);
        });

        var client = new MongoClient();
        var db = client.GetDatabase("d");
        var collectionName = "coll";
        var coll = db.GetCollection<BsonDocument>(collectionName);
        coll.InsertOne(BsonDocument.Parse($"{{ 'Items' : [ {{ 'A' : 'a', 'B1' : 1, C : 'c' }} ] }}"));
        var typed = db.GetCollection<A>(collectionName);
        var result = typed.Find("{}").ToList();
        // result: 1 record
© www.soinside.com 2019 - 2024. All rights reserved.