我使用XML格式来保存我的C#项目的设置。 这些XML被反序列化为C#类。
通常,类设计会发生变化但我忘记更新XML。反序列化通常可以正常工作,缺少的元素只能获得默认值。
这种行为对我来说是不可取的。 我希望自动验证断言类,并且XML具有完全相同的结构。
我知道我可以为我的类创建XML模式(例如使用XSD),但我无法想出一种简单的方法来自动完成它而不是手动(经常回忆我的类的设计更改)。此外,这种解决方案似乎有点不自然。我真的不需要XML模式。我有类及其序列化的XML实例。添加模式似乎是多余的。
非常感谢。
答案 0 :(得分:0)
为什么你不在你的设置类中创建一个可以在xml反序列化后调用的方法?
假设你有一个这样的类:
class Settings {
public string Property1 { get; set; }
public int Property2 { get; set; }
public bool IsValid() {
if(string.IsNullOrEmpty(Property1)) return false;
if(Property2 == 0) return false;
}
}
使用 IsValid ,您可以查看班级中的所有内容。请记住,这是一个例子。我认为管理对象验证很好。如果您在时间内更改了某些内容,则可以编辑验证方法以检查新情况。
答案 1 :(得分:0)
为了配合罗伯托的想法并更进一步,你可以通过反思得到所有的属性:
var props = yourClass.GetType().GetProperties()
在您的验证功能中,您可以使用以下内容遍历这些属性:
foreach(var prop in props) // or foreach(var prop in yourClass.GetType().GetProperties())
{
//...Validation of property
}
如果其中一个属性具有其标准值,则会抛出一个自定义异常,告知您没有正确更新XML文件。
答案 2 :(得分:0)
您可以使用版本容忍序列化(VTS)https://msdn.microsoft.com/en-us/library/ms229752%28v=vs.110%29.aspx
来实现此目的序列化回调是您在VTS功能中寻找的