c# - XmlRootAttribute placement when deserializing to List -
मेरे पास निम्न XML है
& lt;? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -16" स्टैंडअलोन = "नहीं"? & Gt; & LT; साइटें & gt; & LT; साइट & gt; & LT; कोड & gt; TWTR & lt; / संहिता & gt; & LT; नाम & gt; twitter.com & lt; / नाम & gt; & Lt; / साइट & gt; & LT; साइट & gt; & LT; कोड & gt; अमेरिकन प्लान & lt; / संहिता & gt; & LT; नाम & gt; facebook.com & lt; / नाम & gt; & Lt; / साइट & gt; & LT; साइट & gt; & LT; कोड & gt; अतः & lt; / संहिता & gt; & LT; नाम & gt; stackoverflow.com & lt; / नाम & gt; & Lt; / साइट & gt; & Lt; / ब्लॉग & gt; यह कोड है:
सार्वजनिक कक्षा कार्यक्रम {स्थैतिक शून्य मुख्य (स्ट्रिंग [] एआरजी) {var fs = new filestream (@ "D: \ Temp \ Sites.xml ", FileMode.Open); Var serializer = नया XmlSerializer (टाइपफ (सूची & lt; साइट & gt;)); Var उदाहरण = (सूची & lt; साइट & gt;) serializer। डायरेरिअलाइज़ (एफएस); }} [XmlRoot ("साइट")] सार्वजनिक वर्ग साइट {सार्वजनिक स्ट्रिंग कोड {get; सेट; } सार्वजनिक स्ट्रिंग नाम {get; सेट; }} मुझे जो अपवाद मिलता है वह है: & lt; साइटें xmlns = '' & gt; अपेक्षित नहीं था। इस त्रुटि का कारण आम तौर पर होता है, जब मैं XmlSerializer के लिए एक XmlRoot परिभाषित नहीं करता लेकिन जैसा कि आप देख सकते हैं, मैंने उस कोड को साइट के साथ XmlRootAttribute
सजाने के द्वारा किया था, मेरी चाल को पूरा करने के लिए, निम्नलिखित चाल काम करता है:
बदलें
var serializer = नया XmlSerializer (typeof (सूची & lt; साइट & gt;)); के साथ
var serializer = नया XmlSerializer (typeof (सूची & lt; साइट & gt;), नया XmlRootAttribute ("साइट्स")); क्या मुझे कुछ याद आ रहा है?
एक्सएमएलआरूट साइट में जोड़ा गया विशेषता का उपयोग नहीं किया जाता है, क्योंकि आप किसी ऑब्जेक्ट प्रकार को Site के लिए deserializing नहीं कर रहे हैं। आप सूची & lt; साइट & gt; के एक ऑब्जेक्ट को डिसेरीलाइज कर रहे हैं और वह है जहां सीरियलइज़र XmlRoot विशेषता के लिए दिखता है। आपका कार्यवाप वास्तव में सही समाधान है । हालांकि, यदि आप अपने कार्यक्रम में अक्सर इस deserialization प्रदर्शन कर रहे हैं, तो सुनिश्चित करें कि XmlSerializer उदाहरण को कैश करना, क्योंकि यह विशिष्ट निर्माता आंतरिक रूप से गतिशील रूप से तैयार असेंबली को कैश नहीं करता है - यह आपके द्वारा उपयोग किए जाने वाले कन्स्ट्रक्टर के साथ विरोधाभासी है ।
Comments
Post a Comment