2016-04-01 12 views
1

System.Configuration.ConfigurationElementを拡張し、DeserializeElementをオーバーライドすると、eveythingは期待通りに機能し、常に提供され、機能するXmlReaderから必要なものを取得できます。Configuration.Save.SerializeElementに渡されたXmlWriterは、常にConfiguration.Saveでnullです。

残念ながら、SerializeElementをオーバーライドすると、それに提供されているXmlWriterは何らかの理由で常にnullですが、なぜその理由がわかりません。私は他のメソッドをオーバーライドし、呼び出しでbase.SerializeElementを最初に呼び出すことを試みました。いずれにしても、Configuration.Saveメソッドが呼び出されたときにXmlWriterがSerializeElementに渡されていることを確認する方法がまだ見つかっていません。

答えて

1

System.Configuration.ConfigurationElementのソースを調べて、SerializeElementを呼び出すときの動作を確認しました。どうやらSerializeToXmlElementはプライマリの呼び出し元であり、次のコードブロックを持っています。

まず、nullを渡して何かをシリアル化する必要があるかどうかを確認し、trueを返したら実際のライターに渡します。

これはMSDNドキュメントに記載されていません。これを解決する私の解決策は、変更のトラッキングで変更されたメソッドをオーバーライドして、これを私のSerializeElementの先頭に追加することです。

if (writer == null) 
    return isModified; 

は、だから私は、これはそれを行うには非常に奇妙な方法があるとして、それは、シリアル化するかしない必要があるかどうかを知るために、独自のIsModifiedメソッドを使用していない理由はわかりません。しかし、この解決策は機能します。

関連する問題