2010-04-03 13 views
6

मैं समझता हूं कि कैसे XMLSerializer प्रतिबिंब का उपयोग करके काम कर सकता है यह पता लगाने के लिए कि सार्वजनिक पढ़ने/लिखने वाले फ़ील्ड या गुणों का उपयोग करके एक्सएमएल को क्रमबद्ध या डी-सीरियलाइज़ करने के लिए उपयोग किया जाना चाहिए। फिर भी XMLSerializer की आवश्यकता है कि फ़ील्ड सार्वजनिक हों और पढ़ें/लिखें।DataContractSerializer निजी फ़ील्ड में कैसे लिखता है?

हालांकि, DataContractSerializer कक्षा में पूरी तरह से निजी फ़ील्ड को पढ़ने या लिखने में सक्षम है। तो मैं सोच रहा हूं कि यह स्पष्ट रूप से डेटाकंट्रैक्टसाइरिएलाइज़र को मेरे वर्ग (एसएस) के अतिरिक्त पहुंच अधिकार प्रदान करने के साथ भी संभव है।

उत्तर

7

प्रतिबिंब में कई विशेषताएं हैं। XmlSerializer, "sgen.exe" के माध्यम से एक बाइनरी (डीएलएल) में क्रमबद्धता कोड को पूर्व-निर्माण करने की क्षमता है। यह कुछ परिदृश्यों में उपयोगी है जो गतिशील कोड की अनुमति नहीं देते हैं, लेकिन डीएलएस (बस आपके कोड की तरह) सुलभ एपीआई तक सीमित हैं।

हालांकि ... प्रतिबिंब यह सीमित नहीं है, और पर्याप्त पहुंच के साथ आप बहुत कुछ भी कर सकते हैं। प्रदर्शन के लिए आप शायद प्रतिबिंब सीधे का उपयोग नहीं करना चाहते हैं, लेकिन यदि आपके पास सीधे मेमोरी (DynamicMethod) में आईएल बनाने के लिए पर्याप्त अनुमतियां हैं, तो आप इसे (प्रति गतिशील-विधि आधार पर) बता सकते हैं Type कोड के साथ जुड़ा हुआ है। उदाहरण के लिए, यदि मैं DynamicMethodtypeof(Foo)owner तर्क के रूप में पास कर रहा हूं, तो उस गतिशील विधि के पास Foo पर सभी सदस्यों (फ़ील्ड समेत) तक पूर्ण पहुंच है। जानकारी के लिए, Delegate.CreateDelegate अन्यथा सुरक्षित डेटा तक पहुंच प्रदान करता है। चूंकि DataContractSerializer प्री-पीढ़ी के बारे में चिंता नहीं करता है, इसलिए यह इस पहुंच का उपयोग कर सकता है।

2

यह वही तरीका है जो XMLSerializer प्रतिबिंब का उपयोग करके करता है।

अंतर यह है कि XMLSerializer निजी फ़ील्ड को छूएगा लेकिन DataContractSerializer होगा।

this देखें प्रश्न और निजी क्षेत्रों के प्रतिबिंब और परिवर्तन के बारे में प्रश्न।

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