2016-04-01 2 views
1

При расширении System.Configuration.ConfigurationElement и переопределении элемента DeserializeElement eveything работает должным образом и может получить от него необходимый мне XmlReader, который всегда предоставляется и работает.XmlWriter передается в ConfigurationElement.SerializeElement всегда имеет значение null для Configuration.Save

К сожалению, когда я переопределяю SerializeElement, предоставленный ему XmlWriter всегда null, по какой-то причине я еще не определил, почему. Я попытался переопределить другие методы и вызвать base.SerializeElement в первую очередь в вызове. Независимо от того, что мне еще предстоит найти способ убедиться, что XmlWriter передан SerializeElement при вызове метода Configuration.Save, не является нулевым.

ответ

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(); 
} 

Как вы можете видеть, что сначала проходит нуль, чтобы увидеть, если это необходимо сериализовать что-нибудь, и если она возвращает истину, то она проходит фактический автор.

Это недокументировано в документах MSDN. Мое решение разрешить это - сохранить измененные методы переопределения с отслеживанием изменений, а затем добавить это в начало моего SerializeElement.

if (writer == null) 
    return isModified; 

Так что я не знаю, почему он не использовал свой метод IsModified знать, если это необходимо сериализовать или нет, так как это очень необычный способ сделать это. Однако это решение работает.

Смежные вопросы