有没有办法在类反序列化期间不调用函数,如:
private int _number
public int Number
{
get
{
return _number;
}
set
{
_number = value
//do not call this function during deserialization
CallAnotherFunction()
}
}
当MongoDB反序列化对象并设置Number
属性时,它正在调用CallAnotherFunction()
,因为它在集合中。是否有一个标志或任何可用于CallAnotherFunction()
在反序列化期间不被调用的东西?目前,它正在调用函数并在反序列化期间每次添加重复值。
答案 0 :(得分:2)
您可以通过C#MongoDB驱动程序控制对象的序列化和反序列化方式。 在这种情况下,序列化属性本身的属性instread的支持字段应该可以解决您的问题。有关控制序列化的更多详细信息,请查看MongoDB文档中的this article。
使用属性,您的源代码将如下所示:
[BsonElement("Number")]
private int _number
[BsonIgnore]
public int Number
{
get { return _number; }
set {
_number = value
//do not call this function during deserialization
CallAnotherFunction()
}
}
或者,您可以设置自定义类映射。
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.UnmapProperty(c => c.Number);
cm.MapField("_number").SetElementName("Number");
});