Tidak memanggil fungsi selama deserialisasi

Apakah ada cara untuk tidak memanggil fungsi selama deserialisasi kelas seperti:

private int _number
public int Number
{
    get
    {
        return _number;
    }
    set
    {
        _number = value
        //do not call this function during deserialization
        CallAnotherFunction()
    }
}

Ketika MongoDB melakukan deserialisasi objek dan menyetel properti Number, ia memanggil CallAnotherFunction() karena berada di dalam set. Apakah ada tanda atau apa pun yang dapat digunakan agar CallAnotherFunction() tidak dipanggil selama deserialisasi? Saat ini ia memanggil fungsi dan menambahkan nilai duplikat setiap kali selama deserialisasi.


person iefpw    schedule 14.05.2012    source sumber
comment
Saya tidak menjawab pertanyaan Anda, tetapi ini menunjukkan desain Anda salah - Anda seharusnya tidak memiliki efek samping pada setter Anda, selain menetapkan variabel, jika tidak, Anda akan mendapatkan masalah seperti ini.   -  person Polyfun    schedule 14.05.2012


Jawaban (1)


Anda dapat mengontrol bagaimana objek diserialkan dan dideserialisasi oleh driver C# MongoDB. Dalam hal ini, membuat serialisasi bidang pendukung untuk properti di dalam properti itu sendiri akan memperbaiki masalah Anda. Periksa artikel ini di dokumen MongoDB untuk detail lebih lanjut tentang cara mengontrol serialisasi .

Dengan menggunakan atribut, kode sumber Anda akan terlihat seperti ini:

[BsonElement("Number")]
private int _number

[BsonIgnore]
public int Number  
{
  get { return _number; }
  set {
    _number = value

    //do not call this function during deserialization
    CallAnotherFunction()
  }
}

Alternatifnya, Anda dapat menyiapkan peta kelas khusus.

BsonClassMap.RegisterClassMap<MyClass>(cm => {
   cm.AutoMap();
   cm.UnmapProperty(c => c.Number);
   cm.MapField("_number").SetElementName("Number");
});
person Marnix van Valen    schedule 14.05.2012