यदि आपको विशिष्ट विशेषताओं (यानी शब्दकोश, या किसी भी वर्ग) को संभालने की आवश्यकता है, तो आप IXmlSerialiable इंटरफ़ेस को लागू कर सकते हैं , जो आपको अधिक वर्बोज़ कोडिंग की कीमत पर अधिक स्वतंत्रता देगा ।
public class NetService : IXmlSerializable
{
#region Data
public string Identifier = String.Empty;
public string Name = String.Empty;
public IPAddress Address = IPAddress.None;
public int Port = 7777;
#endregion
#region IXmlSerializable Implementation
public XmlSchema GetSchema() { return (null); }
public void ReadXml(XmlReader reader)
{
// Attributes
Identifier = reader[XML_IDENTIFIER];
if (Int32.TryParse(reader[XML_NETWORK_PORT], out Port) == false)
throw new XmlException("unable to parse the element " + typeof(NetService).Name + " (badly formatted parameter " + XML_NETWORK_PORT);
if (IPAddress.TryParse(reader[XML_NETWORK_ADDR], out Address) == false)
throw new XmlException("unable to parse the element " + typeof(NetService).Name + " (badly formatted parameter " + XML_NETWORK_ADDR);
}
public void WriteXml(XmlWriter writer)
{
// Attributes
writer.WriteAttributeString(XML_IDENTIFIER, Identifier);
writer.WriteAttributeString(XML_NETWORK_ADDR, Address.ToString());
writer.WriteAttributeString(XML_NETWORK_PORT, Port.ToString());
}
private const string XML_IDENTIFIER = "Id";
private const string XML_NETWORK_ADDR = "Address";
private const string XML_NETWORK_PORT = "Port";
#endregion
}
एक दिलचस्प लेख है , जो XmlSerializer को "विस्तारित" करने के लिए एक परिष्कृत तरीके को लागू करने का एक सुरुचिपूर्ण तरीका दिखाता है।
लेख कहता है:
IXmlSerializable आधिकारिक दस्तावेज में कवर किया गया है, लेकिन दस्तावेज में कहा गया है कि यह सार्वजनिक उपयोग के लिए नहीं है और इससे परे कोई जानकारी नहीं देता है। यह इंगित करता है कि विकास टीम सड़क के नीचे इस एक्स्टेंसिबिलिटी हुक को संशोधित करने, अक्षम करने या यहां तक कि पूरी तरह से हटाने का अधिकार आरक्षित करना चाहती थी। हालांकि, जब तक आप इस अनिश्चितता को स्वीकार करने और भविष्य में संभावित परिवर्तनों से निपटने के लिए तैयार हैं, तब तक कोई कारण नहीं है कि आप इसका लाभ नहीं उठा सकते।
क्योंकि यह, मेरा सुझाव है कि आप IXmlSerializable
बहुत ही जटिल कार्यान्वयन से बचने के लिए, आप स्वयं की कक्षाएं हैं।
... यह XmlSerializer
प्रतिबिंब का उपयोग करके हमारे कस्टम वर्ग को लागू करने के लिए सीधा हो सकता है।