मेरे पास लगभग एक सौ इकाई वर्ग हैं जो इस तरह दिख रहे हैं:एक [Serializable] INotifyPropertyChanged कार्यान्वयन से nonserializable पर्यवेक्षकों को कैसे बाहर निकालें?
[Serializable]
public class SampleEntity : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; FirePropertyChanged("Name"); }
}
[field:NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
}
}
PropertyChanged
पर [field:NonSerialized]
विशेषता को नोटिस करें। यह आवश्यक है क्योंकि कुछ पर्यवेक्षकों (मेरे मामले में - संस्करण के लिए इकाइयों को प्रदर्शित करने वाला ग्रिड) क्रमिक नहीं हो सकता है, और इकाई को धारावाहिक होना चाहिए, क्योंकि यह प्रदान किया जाता है - रिमोटिंग के माध्यम से - एक सेपरेटर मशीन पर चल रहे किसी एप्लिकेशन द्वारा ।
यह समाधान मामूली मामलों के लिए ठीक काम करता है। हालांकि, यह संभव है कि कुछ पर्यवेक्षक [Serializable]
हैं, और संरक्षित होने की आवश्यकता होगी। मुझे इसे कैसे नियंत्रित करना चाहिए?
समाधान मैं विचार कर रहा हूं:
- पूर्ण
ISerializable
- कस्टम क्रमिकरण के लिए बहुत सारे कोड लिखने की आवश्यकता है, मैं[OnSerializing]
- का उपयोग
[OnSerializing]
और[OnDeserializing]
विशेषताओं कोPropertyChanged
मैन्युअल रूप से क्रमबद्ध करने के लिए नहीं करना चाहूंगा - लेकिन वे सहायक विधि केवलSerializationContext
प्रदान करते हैं, जो AFAIK क्रमबद्धता डेटा संग्रहीत नहीं करता है (SerializationInfo
वह करता है)
आमंत्रण। लक्ष्य शून्य (अज्ञात प्रतिनिधियों के लिए) हो सकता है, इस – skolima
की जांच करना सुनिश्चित करें उन घटनाओं का XmlSerializer पर कोई प्रभाव नहीं पड़ता है (ठीक है, मुझे केवल काम करने के लिए रिमोटिंग की आवश्यकता है)। – skolima
OnSerializing और OnDeserialized निजी होना चाहिए, उन्हें बेनकाब करने की कोई आवश्यकता नहीं है। – skolima