2010-04-26 4 views
6

मैं ऑब्जर्जेबल कोलेक्शन से एक कक्षा प्राप्त करने की कोशिश कर रहा हूं और मुझे इस वर्ग के किसी भी उदाहरण को हर बार कोड की एक पंक्ति को चलाने की आवश्यकता है। मेरा विचार यह था:प्रत्येक बार कक्षा के किसी भी उदाहरण को deserialized है जब मैं एक सी # कक्षा परिभाषा में कोड कैसे चला सकता है?

[Serializable] 
public class ObservableCollection2<T> : ObservableCollection<T>, ISerializable 
{ 
    public ObservableCollection2() 
     : base() 
    { } 

    public ObservableCollection2(SerializationInfo info, StreamingContext context) 
     : base(info, context) 
    { 
     // Put additional code here. 
    } 

    void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     base.GetObjectData(info, context); 
    } 
} 

लेकिन मेरे पास क्रमिकरण से संबंधित उन आधारभूत तरीकों तक पहुंच नहीं है। क्या मुझे मैन्युअल रूप से सभी क्रमिकरण को फिर से लिखने के लिए मजबूर होना पड़ा?

+0

आपको वास्तव में संकेत करना चाहिए कि आप कैसे * क्रमबद्ध हैं; कई अंतर्निर्मित और तृतीय पक्ष क्रमबद्धता API हैं, और वे प्रत्येक अलग-अलग पैटर्न/उपयोग का समर्थन करते हैं। –

+0

अच्छा बिंदु। मैं अंतर्निहित .NET बाइनरी क्रमबद्धता का उपयोग कर रहा हूं। –

उत्तर

15

आप OnDeserializedAttribute का उपयोग कर सकते हैं: "जब किसी विधि पर लागू होता है, तो निर्दिष्ट करता है कि ऑब्जेक्ट के deserialization के बाद विधि को तुरंत कहा जाता है।" ध्यान दें कि विधि को StreamingContext पैरामीटर को स्वीकार करने की भी आवश्यकता है:

[Serializable] 
public class ObservableCollection2<T>: ObservableCollection<T> 
{ 
    [OnDeserialized()] 
    internal void OnDeserializedMethod(StreamingContext context) 
    { 
     this.DateDeserialized = DateTime.Now; 
    } 
} 
+0

अच्छा जवाब लेकिन कुछ लाइनों के साथ एक उदाहरण चोट नहीं पहुंचाएगा। –

+0

@ हेंक - रास्ते पर! –

+0

बहुत बढ़िया! धन्यवाद! (पीएस आपको ISerializable को हटा देना चाहिए) –

संबंधित मुद्दे