2016-04-01 9 views
1

System.Configuration.ConfigurationElement öğesinin genişletilmesi ve DeserializeElement evrthinginin geçersiz kılınması beklendiği gibi çalışır ve her zaman sağlanan ve işlevsel olan XmlReader'dan istediğim şeyi alabilir.XmlWriter ConfigurationElement geçirilir.SerializeElement her zaman boştur Configuration.Save üzerinde

Ne yazık ki, SerializeElement öğesini geçersiz kıldığımda, ona sağlanan XmlWriter her zaman boştur, nedenini henüz belirleyemiyorum. Diğer yöntemleri geçersiz kılmayı denedim ve base.SerializeElement çağrısında ilk şeyi çağırdım. Yine de, Configuration_Save yöntemi çağrıldığında XmlWriter'in SerializeElement öğesine geçtiğinden emin olmak için bir yol bulamadı.

cevap

1

SerializeElement'i çağırdığında ne yaptığını görmek için System.Configuration.ConfigurationElement kaynağına bakarak daha fazla kazma yaptım. Görünüşe göre SerializeToXmlElement birincil arayan ve aşağıdaki kod bloğu var.

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

Eğer ilk bir şey seri hale getirmek gerekiyor ve daha sonra gerçek dönerse asıl yazar geçerse görmek için boş geçer görebileceğiniz gibi.

Bu, MSDN belgelerinde belgesizdir. Bunu çözmek için yaptığım çözüm, değiştirilen yöntemlerin değişikliklerin izlenmesiyle geçersiz kılınması ve ardından bunu SerializeElement öğemin üstüne ekler.

if (writer == null) 
    return isModified; 

Bu yüzden bunu yapmak için çok garip bir yoldur gibi, seri ya da değil ihtiyacı olmadığını bilmek kendi IsModified yöntemi kullanılmıştır gelmez niçin emin değilim. Ancak bu çözüm işe yarıyor.