2012-05-14 154 views
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()在反序列化过程中未被调用的标志?目前它正在调用函数并在反序列化过程中每次添加重复值。

+1

我不回答你的问题,但它表明你的设计错误 - 你真的不应该有副作用在你的制定者,比分配变量等,否则,你得到这些类型的问题。 – Polyfun

回答

2

您可以控制对象的序列化和由C#MongoDB的驱动程序反序列化。 在这种情况下,序列化属性本身属性的支持字段应该可以解决您的问题。请查看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"); 
});