2009-01-07 5 views
8

मैं .NET Fx 3.5 का उपयोग कर रहा हूं और मैंने अपनी कॉन्फ़िगरेशन कक्षाएं लिखी हैं जो कॉन्फ़िगरेशनसेक्शन/कॉन्फ़िगरेशन एलिमेंट से प्राप्त होती हैं।मैं कॉन्फ़िगरेशन एलिमेंट में सीडीएटीए अनुभाग कैसे शामिल कर सकता हूं?

<blah.mail> 
    <templates> 
     <add name="TemplateNbr1" subject="..." body="Hi!\r\nThis is a test.\r\n."> 
      <from address="[email protected]" /> 
     </add> 
    </templates> 
</blah.mail> 

मैं template का एक बच्चा नोड (जो ऊपर के उदाहरण में add नोड है) के रूप में शरीर को व्यक्त करने में सक्षम होना चाहते हैं: वर्तमान में मैं कुछ है कि मेरे विन्यास फाइल में इस तरह दिखता है के साथ खत्म

<blah.mail> 
    <templates> 
     <add name="TemplateNbr1" subject="..."> 
      <from address="[email protected]" /> 
      <body><![CDATA[Hi! 
This is a test. 
]]></body> 
     </add> 
    </templates> 
</blah.mail> 

उत्तर

4

अपने ConfigurationElement उपवर्ग में, अपने डेटा लिखने के लिए XmlWriter.WriteCData का उपयोग कर अधिभावी SerializeElement प्रयास करें, और अधिभावी DeserializeElement XmlReader.ReadContentAsString का उपयोग कर इसे वापस पढ़ने के लिए: कुछ ऐसा दिखता है जैसे के साथ खत्म।

+0

धन्यवाद मैं इसे एक शॉट दूंगा! – cfeduke

5

आपकी कस्टम कॉन्फ़िगरेशन तत्व कक्षा में आपको विधि OnDeserializeUnrecognizedElement को ओवरराइड करने की आवश्यकता है।

उदाहरण:

public class PluginConfigurationElement : ConfigurationElement 
{ 
    public NameValueCollection CustomProperies { get; set; } 

    public PluginConfigurationElement() 
    { 
     this.CustomProperties = new NameValueCollection(); 
    } 

    protected override bool OnDeserializeUnrecognizedElement(string elementName, XmlReader reader) 
    { 
     this.CustomProperties.Add(elementName, reader.ReadString()); 
     return true; 
    } 
} 

मैं एक ही मुद्दे को हल करने के लिए किया था।

+1

मुझे नहीं लगता कि यह .NET 4.5 में काम करता है। उन ओवरराइड हिट होने से पहले अपवाद फेंक दिया जाता है। – JoshBerke

संबंधित मुद्दे