2009-01-07 6 views
8

Tôi đang sử dụng .NET Fx 3.5 và đã viết các lớp cấu hình của riêng tôi kế thừa từ ConfigurationSection/ConfigurationElement. Hiện nay tôi kết thúc với cái gì đó trông như thế này trong tập tin cấu hình của tôi:Làm cách nào để bao gồm phần CDATA trong ConfigurationElement?

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

Tôi muốn để có thể bày tỏ cơ thể như là một nút con của template (đó là add nút trong ví dụ trên) để kết thúc với cái gì đó trông giống như:

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

Trả lời

4

Trong lớp con ConfigurationElement của bạn, hãy thử sử dụng trọng SerializeElement XmlWriter.WriteCData để ghi dữ liệu của bạn, và DeserializeElement trọng sử dụng XmlReader.ReadContentAsString để đọc nó trở lại.

+0

Cảm ơn tôi sẽ thực hiện cú đánh này! – cfeduke

5

Trong lớp yếu tố cấu hình tùy chỉnh của bạn, bạn cần ghi đè phương thức OnDeserializeUnrecognizedElement.

Ví dụ:

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; 
    } 
} 

tôi phải giải quyết cùng một vấn đề.

+1

Tôi không nghĩ rằng nó hoạt động trong .net 4.5. Ngoại lệ được ném trước khi những ghi đè đó bị trúng. – JoshBerke