代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

使用c在类和文件之间同步xml节点#

  •  0
  • Sarah Vessels  · 技术社区  · 14 年前

    我想写一个 IXmlSerializable 类与XML文件保持同步。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文件。我已经有了 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?
    

    我现在的解决办法是 SyncedLoggingSection 继承自的类 伐木区 还需要一个 dllconfig 构造函数中的实例。它宣布 new LogLevel 设置后,将更新 LogLevel 在基类中也使用 dllconfig 写下整个 dllconfig 输出到备份XML文件。这是个好技术吗?

    我不认为我可以直接连载 同步日志部分 由于不是所有的内容都将被写入,所以只需将 <日志记录> 节点。然后我得到一个xml文件,其中只包含 <日志记录> 更新的部分 <日志级别> ,而不是整个配置文件 <日志级别> 更新。因此,我需要通过一个 dllconfig 同步日志部分 .

    似乎我想要一个事件处理程序,一个 dllconfig 当特定的属性(即, 日志级别 )其性质(即, 登录中 )已经准备好了。这样的事情有可能吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   treehouse    14 年前

    由于您自己正在实现IXMLSerializable,因此可以将dllconfig.logging设为私有。然后在dllconfig上添加一个公共方法来设置loglevel,而不是直接设置logging.loglevel。这将是你唯一可以改变日志级别的方法。在该公共方法的实现中,可以序列化整个dllconfig以覆盖xml。