मेरे web method
में, मुझे कुछ तृतीय पक्ष सी # इकाई वर्ग का ऑब्जेक्ट मिलता है। इकाई वर्ग कुछ भी नहीं है लेकिन DataContract
है। यह इकाई वर्ग काफी जटिल है और इसमें विभिन्न प्रकार के गुण हैं, कुछ गुण संग्रह भी हैं। बेशक, उन लिंक किए गए प्रकार डेटाकंट्रैक्ट भी हैं।लिंक से एक्सएमएल वीएस एक्सएमएलएसरिएलाइज़र वीएस डाटाकंट्रैक्ट सर्राइज़र
मैं अपनी वेब सेवा के व्यावसायिक तर्क के हिस्से के रूप में उस डेटाकंट्रैक्ट इकाई को XML में क्रमबद्ध करना चाहता हूं। मैं DataContractSerializer
सीधे (वेब विधि में प्राप्त ऑब्जेक्ट पर) का उपयोग नहीं कर सकता क्योंकि एक्सएमएल स्कीमा पूरी तरह से अलग है। तो DataContractSerializer द्वारा जेनरेट किया गया एक्सएमएल स्कीमा के खिलाफ मान्य नहीं होगा।
मैं उस दृष्टिकोण को समाप्त करने में सक्षम नहीं हूं जिसे मुझे कार्यान्वयन के लिए पालन करना चाहिए। मैं कार्यान्वयन दृष्टिकोण निम्नलिखित के बारे में सोच सकता है:
एक्सएमएल को LINQ - यह ठीक लग रहा है लेकिन मैं मैन्युअल रूप से वस्तु के प्रत्येक प्रकार के लिए एक्सएमएल पेड़ (अर्थात तत्वों या वर्ग उदाहरण के एक्सएमएल प्रतिनिधित्व) बनाने के लिए की जरूरत है। चूंकि कई इकाई वर्ग हैं और वे एक-दूसरे से जुड़े हुए हैं, मुझे लगता है कि एक्सएमएल तत्वों को मैन्युअल रूप से लिखने के लिए यह बहुत अधिक काम है। इसके अलावा, मुझे एक्सएमएल ट्री को संशोधित करना होगा और जब इकाई वर्ग कुछ नई संपत्ति पेश करता है। न केवल यह, कोड जहां मैं एक्सएमएल पेड़ उत्पन्न करता हूं, थोड़ा कमजोर दिखता है (कम से कम उपस्थिति में) और भविष्य में किसी अन्य डेवलपर द्वारा बनाए रखने/बदलने के लिए कठिन होगा; उसे यह समझने के लिए बहुत करीब से देखना होगा कि एक्सएमएल कैसे उत्पन्न होता है।
XmlSerializer - मैं अपने ही इकाई वर्गों कि XML संरचना मैं चाहता हूँ प्रतिनिधित्व करते हैं लिख सकते हैं। अब, मुझे आने वाली वस्तु से अपने स्वयं के वर्गों के ऑब्जेक्ट में विवरण कॉपी करने की आवश्यकता है। तो यह अतिरिक्त काम है (कोड निष्पादित होने पर भी .NET के लिए!)। फिर मैं XML उत्पन्न करने के लिए अपने ऑब्जेक्ट पर
XmlSerializer
का उपयोग कर सकता हूं। इस मामले में, मुझे इकाई कक्षाएं बनाना होगा और जब भी तृतीय पक्ष इकाई संशोधित हो जाएगी, मुझे बस अपनी कक्षा में नई संपत्ति जोड़नी होगी। (XmlElement या XmlAttibute विशेषताओं के साथ)। लेकिन लोग इस परDataContractSerializer
की सलाह देते हैं और इसलिए मैं इसे अंतिम रूप देना नहीं चाहता हूं जब तक कि सभी पहलू मेरे लिए स्पष्ट न हों।DataContractSerializer - फिर यहाँ, मुझे लगता है मैं तीसरे पक्ष DataContracts पर कोई नियंत्रण नहीं के बाद से अपने ही इकाई वर्ग लिखने के लिए होगा। और मुझे आने वाली वस्तु से अपने स्वयं के वर्गों के ऑब्जेक्ट में विवरण कॉपी करने की आवश्यकता है। तो यह अतिरिक्त काम है। हालांकि, चूंकि DataContractSerializer एक्सएमएल विशेषताओं का समर्थन नहीं करता है, इसलिए मुझे
IXmlSerializable
लागू करना होगा औरWriteXml
विधि में आवश्यक एक्सएमएल उत्पन्न करना होगा। DataContractSerializer XmlSerializer से तेज़ है, लेकिन फिर तीसरे पक्ष की इकाई में परिवर्तन होने पर मुझे परिवर्तन (WriteXml में) को संभालना होगा।
सवाल:
- किस तरीके से इस परिदृश्य प्रदर्शन भी विचार करने में सबसे अच्छा है?
- क्या आप कुछ बेहतर दृष्टिकोण सुझा सकते हैं?
DataContractSerializer
पर विचार करने लायक है (क्योंकिXmlSerilaizer
पर बेहतर प्रदर्शन है) जब आने वाली इकाई वर्ग बदल सकती है?- क्या LINQ वास्तव में serialization के लिए उपयोग किया जाना चाहिए? या यह पूछताछ के अलावा अन्य चीजों के लिए वास्तव में अच्छा है?
- क्या ऐसे मामलों में LINQ पर XmlSerializer को प्राथमिकता दी जा सकती है? यदि हां, क्यों?
लिंक साझा करने के लिए धन्यवाद। प्रदान किया गया समाधान मेरी समस्या के लिए उपयोगी नहीं है लेकिन यह LINQ का उपयोग करने के लिए एक और तरीका जानने में मदद करता है! – Learner