1

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

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

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

4

1 回答 1

2

您可以控制 C# MongoDB 驱动程序如何对对象进行序列化和反序列化。在这种情况下,为属性本身的属性 instread 序列化支持字段应该可以解决您的问题。查看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");
});
于 2012-05-14T09:49:39.983 回答