在Configuration.Save上传递给ConfigurationElement.SerializeElement的XmlWriter始终为null

时间:2016-04-01 16:34:52

标签: c# app-config xmlwriter

当扩展System.Configuration.ConfigurationElement并覆盖DeserializeElement eveything按预期工作时,可以从中获得我总是提供和功能的XmlReader。

不幸的是,当我覆盖SerializeElement时,提供给它的XmlWriter由于某种原因总是为null我还没确定原因。我已经尝试重写其他方法并在调用中调用base.SerializeElement。无论我还没有找到一种方法来确保在调用Configuration.Save方法时XmlWriter传递给SerializeElement不是null。

1 个答案:

答案 0 :(得分:1)

我通过查看System.Configuration.ConfigurationElement的源代码来进行更多挖掘,以查看它在调用SerializeElement时正在做什么。显然,SerializeToXmlElement是主调用者,它有以下代码块。

if (SerializeElement(null, false) == true) // check if there is anything to write...
{
    if (writer != null)
        writer.WriteStartElement(elementName);
    DataToWrite |= SerializeElement(writer, false);
    if (writer != null)
        writer.WriteEndElement();
}

正如您所看到的,它首先传递null以查看是否需要序列化任何内容,如果它返回true,则它会传递实际的writer。

这在MSDN文档中没有记录。我解决此问题的解决方案是通过跟踪更改来保留已修改的方法覆盖,然后将其添加到我的SerializeElement的顶部。

if (writer == null)
    return isModified;

所以我不确定它为什么不使用自己的IsModified方法来知道它是否需要序列化,因为这是一种非常奇怪的方法。但是这个解决方案可行。