当扩展System.Configuration.ConfigurationElement并覆盖DeserializeElement eveything按预期工作时,可以从中获得我总是提供和功能的XmlReader。
不幸的是,当我覆盖SerializeElement时,提供给它的XmlWriter由于某种原因总是为null我还没确定原因。我已经尝试重写其他方法并在调用中调用base.SerializeElement。无论我还没有找到一种方法来确保在调用Configuration.Save方法时XmlWriter传递给SerializeElement不是null。
答案 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方法来知道它是否需要序列化,因为这是一种非常奇怪的方法。但是这个解决方案可行。