在反序列化期间不调用函数

本文关键字:调用 函数 反序列化 | 更新日期: 2023-09-27 18:34:00

有没有办法在类反序列化期间不调用函数,例如:

private int _number
public int Number
{
    get
    {
        return _number;
    }
    set
    {
        _number = value
        //do not call this function during deserialization
        CallAnotherFunction()
    }
}

当MongoDB反序列化对象并设置Number属性时,它正在调用CallAnotherFunction()因为它在集合中。是否有一个标志或任何可用于在反序列化期间不被调用CallAnotherFunction()的东西?目前,它正在调用该函数,并在反序列化期间每次添加重复值。

在反序列化期间不调用函数

您可以控制 C# MongoDB 驱动程序如何序列化和反序列化对象。在这种情况下,序列化属性本身的属性设置的支持字段应该可以解决问题。查看MongoDB文档中的这篇文章,了解有关控制序列化的更多详细信息。

使用属性,您的源代码将如下所示:

[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");
});