DataContractSerializer बनाम XmlSerializer: प्रत्येक धारावाहिक के पेशेवरों और विपक्ष


84

मेरा डेस्कटॉप एप्लिकेशन ऑब्जेक्ट का उपयोग करके अनुक्रमित करता है XmlSerializer। मुझे DataContractSerializerइसके बदले लाभ उठाने का सुझाव दिया गया था ।
मुझे किन परिदृश्यों के तहत उपयोग करना चाहिए DataContractSerializer?

बहुत धन्यवाद

टिप्पणियाँ।
1. आउटपुट XML फ़ाइल स्थानीय रूप से संग्रहीत है। कोई अन्य अनुप्रयोग उस XML फ़ाइल से ऑब्जेक्ट्स को डिसेर्बलाइज़ नहीं करता है।
2. मेरा आवेदन .NET फ्रेमवर्क 3.5 SP1 के साथ चलता है।


जवाबों:


112

इस पर डैन रिग्सबी का अंतिम पद है - इसे पढ़ें!

XmlSerializer बनाम DataContractSerializer (वेब ​​संग्रह)

वह कहता है कि सब कहना है, और बहुत आश्वस्त तरीके से।

संक्षेप में:

XmlSerializer:

  • लंबे समय से है
  • "ऑप्ट-आउट" है; जब तक आप इसे नहीं बताएंगे, तब तक सब कुछ सार्वजनिक हो जाता है ([XmlIgnore])

DataContractSerializer है:

  • शहर में नया बच्चा
  • गति के लिए अनुकूलित (XmlSerializer की तुलना में लगभग 10% तेज, आमतौर पर)
  • "ऑप्ट-इन" - केवल सामान जो आप विशेष रूप [DataMember]से चिह्नित करते हैं, क्रमबद्ध किया जाएगा
  • लेकिन कुछ भी चिह्नित किया [DataMember]जाएगा - चाहे वह publicया होprivate
  • XML विशेषताओं का समर्थन नहीं करता (गति कारणों के लिए)

2
@ पॉल- सेबस्टियन मैनोल: डेटाकंट्रेक्टसलाइज़र एक्सएमएल विशेषताओं का समर्थन नहीं करता है - गति कारणों से। विस्तृत क्या है?
marc_s

6
@ पॉल- सेबस्टियन मैनोल: यदि आपके स्रोत एक्सएमएल में एक्सएमएल तत्वों (जैसे <Customer Id="42"> ...) के गुण हैं, तो आप केवल एक्सएमएल धारावाहिक का उपयोग कर रहे हैं
marc_s

2
यह MSDN से उपयोगी हो सकता है: XmlSerializer वर्ग DataContractSerializer वर्ग की तुलना में कई प्रकार के संकरे सेटों का समर्थन करता है, लेकिन परिणामी XML पर अधिक नियंत्रण की अनुमति देता है और XML स्कीमा परिभाषा भाषा (XSD) मानक का अधिक समर्थन करता है। यह क्रमिक प्रकारों पर किसी भी घोषणात्मक विशेषताओं की आवश्यकता नहीं है ... XmlSerializer वर्ग डेटा अनुबंध प्रकारों का समर्थन नहीं करता है। MSDN
पॉल-सेबेस्टियन मैनोल

1
@OO: न केवल .NET 3.5 SP1 और नए में ऑप्ट-इन, बल्कि मेरे लिए, यह अभी भी चीजों को करने का पसंदीदा तरीका है। आपको ऐसे गुण सेट करने देता है जो अन्यथा सेट नहीं किए जा सकते हैं (जैसे क्रमबद्धता, नामस्थान और बहुत कुछ के आदेश!)
marc_s

17
DataContractSerializer के बारे में सबसे बड़ी चेतावनी - जब deserializing, यह तत्वों के क्रम की परवाह करता है और सही क्रम में नहीं होने पर चुपचाप विफल हो जाता है। Imho, जब तक कि आप दोनों छोर पर एक ही समान विधानसभाओं का उपयोग नहीं कर रहे हैं, यह असामान्य रूप से खतरनाक है।
Pxtl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.