我有一个c#应用程序(实际上,它运行在windows服务中,或者类似于windows应用程序)。
在从XML文件接收服务/应用程序的一次运行的配置时。
这个XML文件实际上只是用XML序列化/反序列化了我的数据。它是我的另一个生成它的应用程序之一。
在运行业务代码之前,我希望确保配置文件有效。
我的意思是“这个字符串不能为空”,“这个TimeSpan必须有一个大于By的值”,...
所以只能通过查看字段的内容来进行验证(不需要访问其他内容)。
它让我想起了很多我在asp.Net MVC中使用的数据注释,我希望对于简单的c#代码也有类似的东西,而不必加载整个asp.net MVC dll。
我的另一个选择是实现一个“if(String.IsNullOrEmpty() ()”方法,它会在一个字段不正确时抛出一个异常,但我会有很多验证和其他虚拟验证。
我不想自己实现一个使用reflexion的大型验证器,这对于一个小的配置文件验证来说有点过头了。
生成这些文件应用程序也可能有兴趣使用这些相同的验证。
编辑:我必须使用.Net 3.5
发布于 2012-11-28 19:43:25
我使用了IDataErrorInfo(在wpf应用程序中将使用相同的类)。还有一个自定义方法,我在这里检查每一个可能的属性。
下面是方法:
public Boolean IsModelValid()
{
Boolean isValid = true;
PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in properties)
{
if (!p.CanWrite || !p.CanRead)
{
continue;
}
if (this[p.Name] != null)
{
isValid = false;
}
}
return isValid;
}发布于 2012-11-23 22:42:06
这个问题看起来像是下面的SO问题的副本。
Using ASP.Net MVC Data Annotation outside of MVC
编辑:鉴于您说ValidationContext不可用,我建议您编写一些使用反射的自定义代码,并为您计算属性上的所有属性。
有关如何做到这一点的示例,请参阅此问题的答案。
ASP.Net MVC 2 Controller's TryValidate doesn't validate the List<> items within the model
https://stackoverflow.com/questions/13531192
复制相似问题