2012-05-14 13 views
1

中に関数を呼び出していないように、クラスの直列化復元時に関数を呼び出すしないようにする方法はありますか。逆順化中にCallAnotherFunction()が呼び出されないようにするためのフラグなどがありますか?現時点では、逆シリアル化のたびに関数を呼び出して重複値を追加しています。は、デシリアライゼーション

+1

私はあなたの質問への答えをしませんが、それは間違ってあなたのデザインを提案している - あなたは本当にそうでない場合は、問題のこれらの種類を取得し、変数を割り当てる以外のあなたのセッターでの副作用を、持つべきではありません。 – Polyfun

答えて

2

C#MongoDBドライバを使用して、オブジェクトのシリアル化とデシリアライズを制御できます。 この場合、プロパティ自体のプロパティinstreadのバッキングフィールドをシリアル化して、問題を解決する必要があります。シリアライゼーションの制御の詳細については、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"); 
}); 
関連する問題