Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递给ConfigurationElement.SerializeElement的XmlWriter在配置时始终为null。保存_C#_App Config_Xmlwriter - Fatal编程技术网

C# 传递给ConfigurationElement.SerializeElement的XmlWriter在配置时始终为null。保存

C# 传递给ConfigurationElement.SerializeElement的XmlWriter在配置时始终为null。保存,c#,app-config,xmlwriter,C#,App Config,Xmlwriter,当扩展System.Configuration.ConfigurationElement并重写反序列化元素时,一切都按预期工作,并且可以从中得到我所需要的东西—始终提供并正常工作的XmlReader 不幸的是,当我重写Serialize元素时,由于某种原因,提供给它的XmlWriter总是空的,我还没有确定原因。我已尝试重写其他方法,并在调用中首先调用base.SerializeElement。无论如何,我还没有找到一种方法来确保调用Configuration.Save方法时传递给Seriali

当扩展System.Configuration.ConfigurationElement并重写反序列化元素时,一切都按预期工作,并且可以从中得到我所需要的东西—始终提供并正常工作的XmlReader


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

我通过查看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文档中没有记录。我解决这个问题的解决方案是保持修改后的方法覆盖跟踪更改,然后将其添加到元素的顶部

if (writer == null)
    return isModified;
所以我不知道为什么它不使用自己的IsModified方法来知道它是否需要序列化,因为这是一种非常奇怪的方式。然而,这个解决方案是有效的