有两类:
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 类创建单独的类映射也不起作用。
我知道约定并且它解决了我的问题,但是有没有一种解决方法可以仅使用类映射来解决问题?
您也应该为 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