C# 使用C在类和文件之间同步XML节点#
我正在尝试编写一个与XML文件保持同步的C# 使用C在类和文件之间同步XML节点#,c#,xml,file-io,xml-serialization,abstraction,C#,Xml,File Io,Xml Serialization,Abstraction,我正在尝试编写一个与XML文件保持同步的IXmlSerializable类。XML文件具有以下格式: <?xml version="1.0" encoding="utf-8" ?> <configuration> <logging> <logLevel>Error</logLevel> </logging> ...potentially other sections... </configurati
IXmlSerializable
类。XML文件具有以下格式:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<logging>
<logLevel>Error</logLevel>
</logging>
...potentially other sections...
</configuration>
我想要的是在设置属性时更新(即重写)支持XML文件。我已经有了DllConfig
在设置Logging
时执行此操作。但是,当设置了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?
我当前的解决方案是拥有一个继承自LoggingSection
的SyncedLoggingSection
类,并在构造函数中获取一个DllConfig
实例。它声明了一个新的日志级别
,当设置该日志级别时,更新基类中的日志级别
,并使用给定的DllConfig
将整个DllConfig
写入支持XML文件。这是一种好技术吗
我认为我不能将SyncedLoggingSection
本身序列化到支持XML文件中,因为不是所有的内容都会被写入,只有
节点。然后,我将得到一个XML文件,其中只包含更新了的
部分,而不是更新了
的整个配置文件。因此,我需要将DllConfig
的实例传递到SyncedLoggingSection
似乎我需要一个事件处理程序,
DllConfig
中的事件处理程序会注意到其属性(即LogLevel
)中的特定属性(即Logging
)何时被设置。这样做可能吗?因为您自己正在实现IXmlSerializable,所以可以将DllConfig.Logging设置为私有。然后在DllConfig上添加一个公共方法来设置LogLevel,而不是直接设置Logging.LogLevel。这将是更改日志级别的唯一方法。在该公共方法的实现中,您可以序列化整个DllConfig以覆盖xml。Sarah,您不只是在System.Configuration
命名空间中使用标准类型有什么原因吗?@John:您是指在Visual Studio中将app.config与autologic config.settings一起使用吗?我指的是创建可在app.config或web.config中使用的自定义配置节,视情况而定。您可以使用标准机制将更改写回文件。请参阅文档中的。
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?