我正在使用asp.net 3.5
我有一个包含10个属性的许可证类,但未标记为可序列化。我必须将属性更改记录到数据库中。许可证是一个实体类,我的范围不在于修改它。所以我不能将它标记为serializabel,也不能使用IpropertyChanged Interface。
现在我无法将其存储在viewstate中,因为它不可序列化。我想存储它,以便我可以将它与新值进行比较,看看哪个值已经改变。
如何处理此事。
答案 0 :(得分:2)
您可以通过编写一个查看目标对象的类并使用反射在名称/值字典中存储其所有公开属性的值来完成此操作。然后,在“比较”时间,再次使用反射并与存储在字典中的值进行比较?
只是一个猜测......
答案 1 :(得分:1)
如果您有原始对象(即在更改之前)。然后,最好使用反射来遍历暴露的属性并进行比较。
你的代码可能最终看起来像这样(这不是一个完整的样本):
Type type = license.GetType();
PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach(PropertyInfo property in properties)
{
//compare your properties with property.GetValue(newLicense, null) and property.GetValue(originalLicense, null);
}
然后,您可以使用不同的列存储或执行任何操作。
答案 2 :(得分:0)
作为给定答案的替代方案,您可以查看面向方面编程(例如PostSharp:http://www.sharpcrafters.com/)。
这样,您可以在类外部创建一个方法,每次设置属性时都会调用该方法。在diff之后,可以将任何更改插入到数据库中