.NET का उपयोग करना XmlSerializer का उपयोग करने में क्या सीमाएं (यदि कोई हैं) हैं? उदाहरण के लिए, क्या आप छवियों को एक्सएमएल में क्रमबद्ध कर सकते हैं?.NET का उपयोग करना XmlSerializer का उपयोग करने में क्या सीमाएं (यदि कोई हैं) हैं?
उत्तर
XmlSerializer में कुछ कमियां हैं।
- यह सभी प्रकार के क्रमबद्ध होने के बारे में पता होना चाहिए। आप इसे इंटरफ़ेस द्वारा कुछ पास नहीं कर सकते हैं जो एक प्रकार का प्रतिनिधित्व करता है जिसे धारावाहिक नहीं जानता है।
- यह परिपत्र संदर्भ नहीं कर सकता है।
- ऑब्जेक्ट ग्राफ़ में कई बार संदर्भित होने पर यह एक ही ऑब्जेक्ट को कई बार क्रमबद्ध करेगा।
- निजी क्षेत्र क्रमबद्धता को संभाल नहीं सकता है।
I (बेवकूफ) ने इन समस्याओं में से कुछ को पाने के लिए अपना खुद का धारावाहिक लिखा। ऐसा मत करो; यह बहुत काम है और आपको सड़क के नीचे महीनों में सूक्ष्म बग मिलेगी। मेरे स्वयं के धारावाहिक और स्वरूपक को लिखने में प्राप्त एकमात्र चीज ऑब्जेक्ट ग्राफ़ क्रमबद्धता में शामिल मिन्यूशिया की अधिक प्रशंसा थी।
मुझे डब्ल्यूसीएफ बाहर आने पर NetDataContractSerializer मिला। यह ऊपर से सभी चीजें करता है कि XmlSerializer नहीं करता है। यह XmlSerializer के समान तरीके से क्रमबद्धता को चलाता है। एक धारावाहिक को सूचित करने के लिए सीरियलाइज़र को सूचित करने के लिए गुणों के साथ विभिन्न गुणों या फ़ील्ड को सजाता है। मैंने कस्टम सीरिएलाइज़र को बदल दिया जिसे मैंने नेटडाटाकंट्रैक्टसेरियलाइज़र के साथ लिखा था और परिणाम से बहुत खुश था। मैं इसकी बहुत अधिक सिफारिश करूंगा।
मुझे लगता है कि 3.5SP1 के साथ आपको डेटाकंट्रैक्ट/डेटामेम्बर के साथ अब भी सजाने की आवश्यकता नहीं है। –
+1: NetDataContractSerializer - यह मेरे लिए एक नया है। धन्यवाद! – x0n
कोई सीमा नहीं है तो सुनिश्चित नहीं है .. लेकिन .NET 1.1 में XmlSerialization में एक मेमोरी रिसाव बग था, आपको इस समस्या के साथ घूमने के लिए कैश सीरियलाइज़र ऑब्जेक्ट बनाना था ... वास्तव में, मैं नहीं सुनिश्चित करें कि यह समस्या .NET 2.0 या नए में तय की गई है ...
किसी ने इसे क्यों कम किया? मैंने जो विंडोज सेवा लिखी है, उसे इस एक्सएमएलएसरियलाइज़र मेमोरी रिसाव से पीड़ित किया गया है, और आईएमएचओ शब्द फैलाना अच्छा है। – Larry
एक सीमा जिसे मैं सोच सकता हूं वह यह है कि XmlSerialization ऑप्ट-आउट है; जिसका मतलब है कि किसी वर्ग के किसी भी गुण जिसे आप धारावाहिक नहीं करना चाहते हैं उसे [XmlIgnore] से सजाया जाना चाहिए। तुलना करें कि DataContractSerializer जहां सभी गुण ऑप्ट-इन हैं, आपको स्पष्ट रूप से समावेशी विशेषताओं की घोषणा करनी होगी। यहां एक अच्छा write-up है।
छवियां या उनके बाइनरी सरणी XmlSerializer द्वारा बेस 64 एन्कोडेड टेक्स्ट के रूप में क्रमबद्ध हैं।
आपके द्वारा लिखे गए किसी भी वर्ग को सैद्धांतिक रूप से XmlSerializer के माध्यम से खिलाया जा सकता है। हाउवर, केवल सार्वजनिक क्षेत्रों तक पहुंच है, और कक्षाओं को सही विशेषताओं (उदा। XmlAttribute) के साथ चिह्नित करने की आवश्यकता है। बुनियादी ढांचे में भी, सब कुछ XmlSerializer का समर्थन नहीं करता है। उदाहरण के लिए System.Collections.Generic.Dictionary <>।
उदाहरण के लिए, आप IDictionary इंटरफ़ेस को लागू करने वाले वर्गों को क्रमबद्ध नहीं कर सकते हैं।
संग्रह के लिए उन्हें एक भी विधि लेने के लिए एक विधि जोड़ने की आवश्यकता है। यदि आपको केवल एक टेक्स्ट प्रारूप की आवश्यकता है और विशेष रूप से एक्सएमएल नहीं है तो आप JSON को आजमा सकते हैं। मैंने .NET, JsonExSerializer के लिए एक विकसित किया है, और अन्य http://www.json.org पर भी उपलब्ध हैं।
मुझे आम तौर पर XmlSerializer को किसी भी पीओसीओ के लिए खराब विकल्प माना जाता है जो कि केवल एक डीटीओ से अधिक है। यदि आपको विशिष्ट एक्सएमएल की आवश्यकता है, तो आप एक्सएमएल * एट्रिब्यूट और/या IXmlSerializable मार्ग पर जा सकते हैं - लेकिन आप ऑब्जेक्ट के साथ बहुत उलझन में हैं।
कुछ उद्देश्यों के लिए, यह अभी भी एक स्पष्ट विकल्प है - इसकी सीमाओं के साथ भी।लेकिन, डेटा को संग्रहीत करने और पुनः लोड करने के लिए, मुझे बाइनरीफॉर्मेटर को कम नुकसान के साथ एक बहुत आसान विकल्प मिल गया है।
यहाँ XmlSerializer के साथ कुछ खीज की एक सूची है - सबसे मैं एक बिंदु या किसी अन्य पर ने काट लिया गया है, दूसरों को मैं MSDN में अधिक पाया:
- एक सार्वजनिक, कोई आर्ग निर्माता
- केवल आवश्यक है सार्वजनिक पढ़ने/लिखने के गुणों और क्षेत्रों को क्रमबद्ध करता है
- सभी प्रकारों को ज्ञात होने की आवश्यकता है
- वास्तव में get_ * और set_ * में कॉल करता है, इसलिए सत्यापन, आदि चलाया जाएगा। यह अच्छा है या बुरा हो सकता है (कॉल के आदेश के बारे में सोचने के रूप में अच्छी तरह से)
- केवल विशिष्ट नियमों
XmlSerializer वर्गों है कि लागू करने के लिए विशेष उपचार देता है के अनुरूप IEnumerable या ICollection संग्रह को क्रमानुसार करेंगे IEnumerable या ICollection। एक वर्ग जो IENumerable लागू करता है उसे एक सार्वजनिक जोड़ें विधि लागू करना आवश्यक है जो एक पैरामीटर लेता है। Add विधि का पैरामीटर उसी प्रकार का होना चाहिए जैसा कि वर्तमान संपत्ति से GetEnumerator से लौटाए गए मान पर या उस प्रकार के अड्डों में से एक पर लौटाया गया है।
आईन्यूमेरेबल के अलावा आईसीओलेक्शन (जैसे कलेक्शनबेस) लागू करने वाली एक कक्षा में सार्वजनिक आइटम अनुक्रमित संपत्ति (सी # में इंडेक्सर) होना चाहिए जो एक पूर्णांक लेता है, और इसमें एक प्रकार की पूर्णांक की सार्वजनिक गणना संपत्ति होनी चाहिए। ऐड विधि का पैरामीटर उसी प्रकार का होना चाहिए जैसा कि आइटम प्रॉपर्टी से लौटाया गया है, या उस प्रकार के बेस में से एक है। आईसीओलेक्शन को लागू करने वाले वर्गों के लिए, अनुक्रमित किए जाने वाले मान अनुक्रमित आइटम प्रॉपर्टी से पुनर्प्राप्त किए जाते हैं, न कि GetEnumerator को कॉल करके।
- IDictionary
- गतिशील रूप से उत्पन्न उपयोगों को विधानसभाओं, जो एप्लिकेशन डोमेन से उतार नहीं सकता है क्रमानुसार नहीं करता है।
प्रदर्शन को बढ़ाने के लिए, एक्सएमएल क्रमबद्धता बुनियादी सुविधाओं गतिशील क्रमानुसार और निर्दिष्ट प्रकार deserialize करने के लिए विधानसभाओं उत्पन्न करता है। आधारभूत संरचना उन विधानसभाओं को पाती है और उनका पुन: उपयोग करती है। यह व्यवहार केवल तब होता है जब निम्नलिखित कंस्ट्रक्टर्स का उपयोग कर:
XmlSerializer.XmlSerializer (प्रकार) XmlSerializer.XmlSerializer (प्रकार, स्ट्रिंग)
आप अन्य निर्माताओं के किसी भी उपयोग करते हैं, एक ही विधानसभा के कई संस्करण उत्पन्न कर रहे हैं और कभी भी अनलोड नहीं किया जाता है, जिसके परिणामस्वरूप स्मृति रिसाव और खराब प्रदर्शन होता है।
- ArrayList [] या सूची < टी > []
- है अन्य अजीब किनारे मामलों को क्रमानुसार नहीं कर सकते
XmlSerializer एक गणन क्रमानुसार करने निम्न स्थितियों रहे हैं instantiated नहीं किया जा सकता है सत्य: गणना अनुक्रमित लंबी (सी # में उलझन) है और गणना में किसी भी सदस्य के पास 9, 223,372,036,854,775,807 से अधिक मूल्य वाला कोई सदस्य होता है।
XmlSerializer क्लास अब ऑब्जेक्ट्स को क्रमबद्ध नहीं करता है जो [अप्रचलित] के रूप में चिह्नित हैं।
किसी ऑब्जेक्ट को deserialize करने के लिए आपको अस्थायी निर्देशिका (जैसा कि TEMP पर्यावरण चर द्वारा परिभाषित किया गया है) को लिखने की अनुमति होनी चाहिए।
- .InnerException पढ़ने की आवश्यकता है त्रुटियों
जीज़, यह बहुत है! सीमाओं का! विस्तार के लिए धन्यवाद। +1 वोट – Phil
पर किसी भी उपयोगी जानकारी पाने के लिए एक और समस्या यह है कि XmlSerializer के निर्माता बुला रनटाइम पर कोड संकलन जाएगा और एक अस्थायी DLL (उत्पन्न होगा% अस्थायी में है % फ़ोल्डर) कोड को डी/क्रमबद्ध करने के लिए कोड के साथ।
अगर आप app.config निम्न पंक्तियां जोड़ें आप कोड देख सकते हैं:
<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="4"/>
</switches>
</system.diagnostics>
यह बहुत समय पहली बार जब आप एक वर्ग को क्रमानुसार लेता है और संकलन और लिखने के लिए अनुमति के साथ कोड की जरूरत डिस्क।
वीएस 2005+ के साथ आने वाले sGen.exe उपकरण का उपयोग करके इन डीएलएल को प्रीकंपाइल करने का एक तरीका है।
- 1. क्या .NET असेंबली प्रारूप में आकार सीमाएं हैं?
- 2. क्या आप https का उपयोग करने लायक हैं यदि आप वित्तीय लेनदेन नहीं कर रहे हैं?
- 3. XmlSerializer का उपयोग करना इतना कठिन क्यों है?
- 4. SQLite: व्यावहारिक सीमाएं क्या हैं?
- 5. XmlSerializer - C0 .NET 2.0 का उपयोग करते हुए
- 6. लुसीन का उपयोग करने के डाउनसाइड्स क्या हैं?
- 7. वीबीए में कक्षाओं का उपयोग करने के क्या फायदे हैं?
- 8. पहचानकर्ताओं में यूनिकोड का उपयोग करने के अनुभव क्या हैं
- 9. लोग सेटिंग फ़ाइलों का उपयोग करने के बजाय ऐपकॉन्फिग का उपयोग क्यों करते हैं? (.NET)
- 10. .NET 4.0 में डायनामिक भाषा रनटाइम की सीमाएं क्या हैं?
- 11. क्या आप फ़िंग का उपयोग करते हैं?
- 12. डेटाबेस में देखने का उपयोग करने के क्या फायदे हैं?
- 13. क्या आप दावे का उपयोग करते हैं?
- 14. आप .NET एप्लिकेशन में RequJS का उपयोग कैसे करते हैं?
- 15. क्या सत्र कुकीज़ का उपयोग करते हैं?
- 16. .NET में System.String.Copy का उपयोग क्या है?
- 17. यदि उपलब्ध हो तो सी # विधि समूह का उपयोग करने के कोई लाभ हैं?
- 18. मुलायम संदर्भों का उपयोग करने के "व्यावहारिक परिणाम" क्या हैं?
- 19. डब्ल्यूसीएफ का उपयोग करने के क्या फायदे हैं?
- 20. त्रुटि का उपयोग करने के क्या फायदे हैं?
- 21. automapper का उपयोग करने के क्या फायदे हैं?
- 22. डब्ल्यूपीएफ में .NET 2.0 (विंडोज फॉर्म) नियंत्रणों का उपयोग करने की सीमाएं?
- 23. एनडीके का उपयोग करने के पोर्टेबिलिटी प्रभाव क्या हैं?
- 24. .NET में ClickOnce परिनियोजन का उपयोग करने के नुकसान क्या हैं?
- 25. क्या ASP.NET में धागे का उपयोग करने में कोई गैर-स्पष्ट खतरे हैं?
- 26. क्या भौतिक भंडार पर गिट सॉफ़्टवेयर के विभिन्न संस्करणों का उपयोग करने के लिए कोई सीमाएं मौजूद हैं?
- 27. डीएलएल का उपयोग करने के पेशेवर और विपक्ष क्या हैं?
- 28. .NET में थ्रेड स्थानीय संग्रहण का उपयोग करने के लिए सर्वोत्तम प्रथाएं क्या हैं?
- 29. global.asax का उपयोग करने के लिए क्या विकल्प हैं?
- 30. एआरसी का उपयोग करने के फायदे और नुकसान क्या हैं?
कृपया पुन: टैग करें। यह एक सी #-विशिष्ट सवाल नहीं है। इसके बजाय ".net" के साथ टैग करें। –