सी # में, मैं किसी ऑब्जेक्ट को deserialize करने के लिए XmlSerializer
का उपयोग कैसे कर सकता हूं जो बेस क्लास या किसी भी व्युत्पन्न कक्षाओं में से किसी भी प्रकार को पहले बिना जाने?मैं किसी ऑब्जेक्ट को deserialize करने के लिए XmlSerializer का उपयोग कैसे करूं जो आधार या व्युत्पन्न कक्षा के पहले बिना किसी प्रकार के जानने के हो सकता है?
मेरे सभी व्युत्पन्न वर्ग अतिरिक्त डेटा सदस्यों को जोड़ते हैं। मैंने एक साधारण जीयूआई बनाया है जो कक्षा वस्तुओं को क्रमबद्ध और deserialize कर सकते हैं। यह ऑब्जेक्ट्स को क्रमबद्ध करेगा क्योंकि जो भी विरासत वर्ग (या यहां तक कि केवल बेस क्लास) उपयुक्त है, जिसके आधार पर उपयोगकर्ता पॉप्युलेट करना चुनता है।
मुझे क्रमबद्धरण के साथ कोई समस्या नहीं है; समस्या deserialization है। मैं संभवतः XmlSerializer
कक्षा को जानने के बिना सही व्युत्पन्न कक्षा में डेटा को deserialize कैसे कर सकता हूं? मैं वर्तमान में XML फ़ाइल के पहले नोड को पढ़ने के लिए XmlReader
बना रहा हूं और इससे कक्षा निर्धारित करता हूं, और ऐसा लगता है कि यह मेरे उद्देश्यों के लिए काम करता है, लेकिन यह एक बेहद सुरुचिपूर्ण समाधान की तरह लगता है।
मैंने नीचे कुछ नमूना कोड पोस्ट किया है। कोई सुझाव?
BaseType objectOfConcern = new BaseType();
XmlSerializer xserializer;
XmlTextReader xtextreader = new XmlTextReader(DEFAULT_FILENAME);
do { xtextreader.Read(); } while (xtextreader.NodeType != XmlNodeType.Element);
string objectType = xtextreader.Name;
xtextreader.Close();
FileStream fstream = new FileStream(DEFAULT_FILENAME, FileMode.Open);
switch (objectType)
{
case "type1":
xserializer = new XmlSerializer(typeof(DerivedType));
objectOfConcern = (DerivedType)xserializer.Deserialize(fstream);
//Load fields specific to that derived type here
whatever = (objectOfConcern as DerivedType).NoOfstreamubordinates.ToString();
case "xxx_1":
//code here
case "xxx_2":
//code here
case "xxx_n":
//code here
//and so forth
case "BaseType":
xserializer = new XmlSerializer(typeof(BaseType));
AssignEventHandler(xserializer);
objectOfConcern = (BaseType)xserializer.Deserialize(fstream);
}
//Assign all deserialized values from base class common to all derived classes here
//Close the FileStream
fstream.Close();
बहुत शांत है, धन्यवाद! अच्छे उदाहरण के लिए –