c# - Understanding System.Xml.Serialization.XmlIgnoreAttribute with base classes -
मेरे पास दो वर्ग हैं, जो नीचे दिखाए गए हैं:
[serializable] [XmlInclude (typeof SomeDerived))] सार्वजनिक वर्ग SomeBase {सार्वजनिक स्ट्रिंग SomeProperty {get; सेट; }} पब्लिक क्लास SomeDerived: SomeBase {[XmlIgnore] सार्वजनिक नया स्ट्रिंग SomeProperty {get; सेट; }}
जब मैं सीरियलाइज़ करता हूं और SomeDerived
का उदाहरण मुझे SomeProperty
के लिए मान देखने की उम्मीद नहीं है हालांकि, मैं करता हूँ मैंने SomeProperty
को वर्चुअल
में SomeBase
के रूप में घोषित करने और इसे SomeDerived
में ओवरराइड करने की कोशिश की है। फिर भी मैं इसे SomeDerived
के एक क्रमबद्ध उदाहरण में देखता हूं।
क्या कोई यह भी समझा सकता है कि XmlIgnoreAttribute
पूर्णता के लिए, मेरा deserialization कोड नीचे है
वर्ग प्रोग्राम {स्थिर शून्य मुख्य (स्ट्रिंग [] args) {SomeDerived someDerived = new SomeDerived {SomeProperty = "foo"}; XmlSerializer ser = नया XmlSerializer (टाइपफ (SomeBase)); मेमोरीस्ट्रीम memStream = नया मेमोरीस्ट्रीम (); XmlTextWriter xmlWriter = नया XmlTextWriter (memStream, एन्कोडिंग.डिफ़ॉल्ट); Ser.Serialize (memStream, someDerived); xmlWriter.Close (); memStream.Close (); स्ट्रिंग xml = एन्कोडिंग.डिफ़ॉल्ट.गेटस्ट्रिंग (memStream.GetBuffer ()); Console.WriteLine (एक्सएमएल); Console.ReadLine (); }}
संपादित करें
अगर मैं सीरियलआइज़र घोषणा को नया एक्सएमएल सेरियलाइज़र (टाइपफ (कुछ डरिव्ड)) में बदलता हूं, तो मुझे ऐसा व्यवहार मिलता है
। < / P>
इसे आज़माएं कुछ सीरियलायझेशन ओवरराइड में पास करने के लिए यह XmlSerializer कन्स्ट्रक्टर पर ओवरराइड का उपयोग करता है:
कुछ डर गया कुछ डरिवेट = नया कुछ डर गया {SomeProperty = "foo"}; // XmlAttributeOverrides और XmlAttributes ऑब्जेक्ट बनाएँ XmlAttributeOverrides ओवरराइड = नया XmlAttributeOverrides (); Xml गुण attrs = नया Xml गुण (); / * बजाय XmlSerializer को समूहनाम के लिए उपेक्षा करने के लिए XmlIgnore का उपयोग करें * / एटर्स = नया एक्सएलएल गुण (); Attrs.XmlIgnore = सच; ओवरराइड। जोड़ें (टाइपफ़ (कुछबेश), "कुछप्रोपेर्टी", एटर्स); XmlSerializer ser = नया XmlSerializer (टाइपफ (SomeBase), ओवरराइड); मेमोरीस्ट्रीम memStream = नया मेमोरीस्ट्रीम (); XmlTextWriter xmlWriter = नया XmlTextWriter (memStream, एन्कोडिंग.डिफ़ॉल्ट); Ser.Serialize (memStream, someDerived); xmlWriter.Close (); memStream.Close (); स्ट्रिंग xml = एन्कोडिंग.डिफ़ॉल्ट.गेटस्ट्रिंग (memStream.GetBuffer ());
Comments
Post a Comment