我正在嘗試編寫一個保持與XML文件同步的類IXmlSerializable
。 XML文件的格式如下:使用C#同步類和文件之間的XML節點
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<logging>
<logLevel>Error</logLevel>
</logging>
...potentially other sections...
</configuration>
我有一個DllConfig
類整個XML文件和LoggingSection
類代表<logging>
及其內容,即<logLevel>
。 DllConfig
擁有此屬性:
[XmlElement(ElementName = LOGGING_TAG_NAME,
DataType = "LoggingSection")]
public LoggingSection Logging { get; protected set; }
我要的是爲後盾的XML文件進行更新(即重寫)當一個屬性設置。當已設置Logging
時,我已經有DllConfig
。但是,當Logging.LogLevel
被設置時,我應該如何去做這件事?下面是我的意思的例子:
var config = new DllConfig("path_to_backing_file.xml");
config.Logging.LogLevel = LogLevel.Information; // not using Logging setter, but a
// setter on LoggingSection, so how
// does path_to_backing_file.xml
// have its contents updated?
我目前的解決方案是有一個SyncedLoggingSection
類,從LoggingSection
繼承並在構造函數中需要DllConfig
實例。它聲明一個new LogLevel
,它在設置時更新基類中的LogLevel
,並使用給定的DllConfig
將整個DllConfig
寫出到支持XML文件。這是一個很好的技術嗎?
我不認爲我可以將SyncedLoggingSection
自己序列化到支持XML文件,因爲並非所有內容都將被寫入,只是<logging>
節點。然後,我會最終得到一個XML文件,其中只包含<logging>
部分及其更新的<logLevel>
,而不是更新的整個配置文件<logLevel>
。因此,我需要將DllConfig
的實例傳遞給SyncedLoggingSection
。
看起來幾乎就像我想的事件處理程序,一個在DllConfig
當特殊屬性(即LogLevel
)在其屬性(即Logging
)進行設置,將另行通知。這樣的事情可能嗎?
莎拉,有沒有一個原因,你不只是在'System.Configuration'命名空間中使用標準類型? – 2010-06-16 19:04:58
@John:你是指在Visual Studio中使用app.config和automagical Config.settings? – 2010-06-16 19:07:51
我正在討論如何根據情況創建可以在app.config或web.config中使用的自定義配置節。您可以使用標準機制將更改寫回文件。請參閱文檔中的[ConfigurationManager類](http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.aspx)。 – 2010-06-16 19:38:55