ไม่เรียกใช้ฟังก์ชันระหว่างการดีซีเรียลไลซ์

มีวิธีที่จะไม่เรียกใช้ฟังก์ชันระหว่างการดีซีเรียลไลซ์คลาสหรือไม่ เช่น:

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

เมื่อ MongoDB ดีซีเรียลไลซ์อ็อบเจ็กต์และตั้งค่าคุณสมบัติ Number วัตถุจะเรียก CallAnotherFunction() เนื่องจากอยู่ในชุด มีแฟล็กหรืออะไรก็ตามที่สามารถใช้กับ CallAnotherFunction() ที่ไม่ถูกเรียกระหว่างการดีซีเรียลไลเซชันได้หรือไม่? ขณะนี้กำลังเรียกใช้ฟังก์ชันและเพิ่มค่าที่ซ้ำกันทุกครั้งในระหว่างการดีซีเรียลไลซ์


person iefpw    schedule 14.05.2012    source แหล่งที่มา
comment
ฉันไม่ได้ตอบคำถามของคุณ แต่มันบ่งบอกว่าการออกแบบของคุณผิด - คุณไม่ควรจะมีผลข้างเคียงในตัวตั้งค่าของคุณ นอกเหนือจากการกำหนดตัวแปร ไม่เช่นนั้นคุณจะพบปัญหาประเภทนี้   -  person Polyfun    schedule 14.05.2012


คำตอบ (1)


คุณสามารถควบคุมวิธีที่ออบเจ็กต์ถูกซีเรียลไลซ์และดีซีเรียลไลซ์โดยไดรเวอร์ C# MongoDB ในกรณีนี้ การทำอนุกรมฟิลด์สำรองสำหรับคุณสมบัติที่แทรกเข้าไปในคุณสมบัตินั้นควรแก้ไขปัญหาของคุณได้ ตรวจสอบบทความนี้ในเอกสาร 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");
});
person Marnix van Valen    schedule 14.05.2012