我有一个遗留系统,它首先从 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>
请注意,MaxFailedLogins 未在 XML 中设置,因此默认为 3。
因此,我想监视序列化程序以了解 LoginUrl 和 LogoutUrl 是唯一被触及的。
注意:我知道我可以将它们转换为属性并在 setter 方法中执行一些逻辑,但我们谈论的是现实世界中的数百个属性,而不仅仅是我示例中的 3 个,所以我试图避免这种情况有点乏味。