2012-11-23 59 views
0

我有一個C#應用程序(實際上它運行到Windows服務或像Windows應用程序)。DataModel驗證在C#

從XML文件接收服務/應用程序的一次運行配置。

這個XML文件實際上只是我的數據在XML中序列化/反序列化。這是我生成它的其他應用程序之一。

在運行業務代碼之前,我想確保配置文件是有效的。

我的意思是,比如像「此字符串不能爲空」,「這個時間跨度的值必須大於XYZ更大」,...可以通過seing的內容進行

因此,只有驗證該字段(無需訪問其他內容)。

它提醒了我很多我在asp.Net MVC中使用的數據註釋,我想如果有一些類似的簡單c#代碼,而不必加載整個asp.net MVC dll。

我的其他選擇是實現一個方法「驗證()」,如果一個字段不正確,會拋出異常,但我會有很多if(String.IsNullOrEmpty()和其他虛擬驗證。

我不想讓自己成爲一個使用反射的大型驗證器,對於一個小的配置文件驗證來說有點矯枉過正。

生成這些文件的應用程序也可以使用這些相同的驗證。

編輯:我使用的.Net 3.5

回答

0

我用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; 
    } 
1

這個問題看起來像下面的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

+0

「我一直在尋找一個.net 3.5解決方案 - ValidationContext不可用.NET 4.0之前的」選擇解決方案的第一個評論。 就像我之前所說的,我需要使用.Net 3.5 – J4N