2012-05-14 149 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"); 
});