मैं एक कक्षा को क्रमबद्ध करने की कोशिश कर रहा हूं जो बेस क्लास से विरासत में आता है जो IXmlSerializable लागू करता है।बेस क्लास में IXmlSerializable को कार्यान्वित करते समय वापस 'डिफ़ॉल्ट' एक्सएमएल क्रमिकरण पर वापस कैसे करें?
संपत्ति वर्ग नामक बेस क्लास एक कक्षा है जो गतिशील गुणों (credits to Marc Gravell) की अनुमति देती है।
मैंने IXmlSerializable लागू किया ताकि गतिशील गुण (एक शब्दकोश में संग्रहीत) सामान्य xml तत्वों के रूप में लिखे जाएं।
उदा। निम्नलिखित कार्यान्वयन के साथ काम करने के लिए
<Person>
<Name>Tim</Name>
<DynamicProperties>
<Country>
<string>USA</string>
</Country>
</DynamicProperties>
<Person>
मैं हिस्सा प्राप्त कर सकते हैं: जब एक सार्वजनिक संपत्ति (गैर गतिशील) नाम और एक गतिशील संपत्ति उम्र के साथ एक कक्षा व्यक्ति serializing, मैं इसे निम्न XML उत्पन्न करने के लिए के लिए चाहते हैं आधार PropertyBag कक्षा में WriteXml की:
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("DynamicProperties");
// serialize every dynamic property and add it to the parent writer
foreach (KeyValuePair<string, object> kvp in properties)
{
writer.WriteStartElement(kvp.Key);
StringBuilder itemXml = new StringBuilder();
using (XmlWriter itemWriter = XmlWriter.Create(itemXml))
{
// serialize the item
XmlSerializer xmlSer = new XmlSerializer(kvp.Value.GetType());
xmlSer.Serialize(itemWriter, kvp.Value);
// read in the serialized xml
XmlDocument doc = new XmlDocument();
doc.LoadXml(itemXml.ToString());
// write to modified content to the parent writer
writer.WriteRaw(doc.DocumentElement.OuterXml);
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
हालांकि, जब व्यक्ति वर्ग serializing, तो वह अब सामान्य (गैर गतिशील) गुण serializes जब तक कि मैं व्यक्ति (जो मैं नहीं करना चाहता हूँ में WriteXml विधि के ऊपर लिख)। क्या कोई तरीका है कि बेस क्लास में मैं स्वचालित रूप से स्थैतिक गुण जोड़ सकता हूं? मुझे पता है कि मैं इसे प्रतिबिंब का उपयोग करके मैन्युअल रूप से कर सकता हूं, लेकिन मैं सोच रहा था कि नेट फ्रेमवर्क में कुछ अंतर्निहित कार्यक्षमता है या नहीं?
मुझे लगता है कि आपको "स्थैतिक" शब्द से बचना चाहिए, क्योंकि इसका दूसरा (बहुत अलग) अर्थ है ... –