मैं एक्सएमएल क्रमबद्ध करने के लिए कोड लिख रहा हूं। नीचे समारोह के साथ।एक्सएमएल-सीरियलज़ेबल क्लास को पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता क्यों है
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
यदि तर्क पैरामीटर रहित कन्स्ट्रक्टर के बिना कक्षा का उदाहरण है, तो यह अपवाद फेंक देगा।
बिना क्रिया के अपवाद: System.InvalidOperationException: CSharpConsole.Foo धारावाहिक नहीं किया जा सकता क्योंकि यह एक parameterless निर्माता नहीं है। System.Xml.Serialization.TypeDesc.CheckSupported() System.Xml.Serialization.TypeScope.GetTypeDesc (प्रकार प्रकार, MemberInfo sourc ई, बूलियन directReference, बूलियन throwOnError) पर System.Xml.Serialization पर पर। ModelScope.GetTypeModel (प्रकार प्रकार, बूलियन प्रत्यक्ष संदर्भ) System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (प्रकार प्रकार, XmlRootAttribute जड़, स्ट्रिंग defaultNamespace) पर System.Xml.Serialization.XmlSerializer..ctor पर (प्रकार टाइप करें, स्ट्रिंग डिफ़ॉल्ट नाम स्थान) System.Xml.Serialization.XmlSerializer..ctor (टाइप प्रकार)
एक्सएमएल क्रमबद्धता को सफल होने की अनुमति देने के लिए पैरामीटर रहित कन्स्ट्रक्टर क्यों होना चाहिए?
संपादित करें: सीएफड्यूक के उत्तर के लिए धन्यवाद। पैरामीटर रहित कन्स्ट्रक्टर निजी या आंतरिक हो सकता है।
यदि आप रुचि रखते हैं, तो मुझे पता चला कि कन्स्ट्रक्टर की आवश्यकता के बिना ऑब्जेक्ट्स कैसे बनाएं (अपडेट देखें) - लेकिन यह XmlSerializer को बिल्कुल भी मदद नहीं करेगा - यह अभी भी इसकी मांग करता है। कस्टम कोड के लिए उपयोगी, शायद। –
'XmlSerializer' को deserialization के लिए एक डिफ़ॉल्ट पैरामीटर रहित कन्स्ट्रक्टर की आवश्यकता है। –