XML ファイルから構成クラスを読み取ることから始まり、逆シリアル化された後、結果のオブジェクトに対して他のさまざまなロジックを実行するレガシー システムがあります。
古い構成ファイルを新しい形式に移行するツールを作成する際に、通常のシリアル化プロセスを実行しようとしていますが、XML ファイルから逆シリアル化されたプロパティのみを追跡する必要があります。XML シリアライザーにフックして、逆シリアル化する各プロパティのイベントをトリガーする方法はありますか?
次のようなクラスを考えてみましょう。
public class UrlPrefs{
public string LoginUrl = "http://default.com/login";
public string LogoutUrl = "http://default.com/logout";
public int MaxFailedLogins = 3;
}
// ...
public UrlPrefs ReadUrlPrefs(string fileName){
var ser = new XmlSerializer(typeof(UrlPrefs));
using(var stream = new StreamReader(fileName)){
UrlPrefs ret = (UrlPrefs)ser.Deserialize(stream);
return TouchUpPrefsFromDB(ret); // Gets another layer of overrides from the database...
}
}
以下は、有効な UrlPrefs.xml です。
<UrlPrefs>
<LoginUrl>http://customer.com/login</LoginUrl>
<LogoutUrl>http://customer.com/logout</LogoutUrl
</UrlPrefs>
XML では MaxFailedLogins が設定されていないため、デフォルトで 3 に設定されていることに注意してください。
したがって、シリアライザーを監視して、LoginUrl と LogoutUrl だけが影響を受けたことを確認したいと思います。
注: それらをプロパティに変換し、setter メソッドでいくつかのロジックを実行できることはわかっていますが、私の例の 3 つだけでなく、現実世界の何百ものプロパティについて話しているので、それを避けようとしています。一種の退屈。