2012-05-14 2 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"); 
}); 
Смежные вопросы