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 に答える