我有一个遗留系统,首先从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个属性,所以我正在尝试避免那种单调乏味。