[英]An easy way to validate an XML against a C# Class
我使用XML格式保留C#項目的設置。 這些XML被反序列化為C#類。
通常,類設計會發生變化,但我忘了更新XML。 反序列化通常可以正常工作,缺少的元素只需獲取其默認值即可。
這種行為對我來說是不可取的。 我想擁有斷言該類和XML具有完全相同的結構的自動驗證。
我知道我可以為我的類創建XML模式(例如,使用XSD),但是我無法找到一種自動且不手動的簡單方法(經常回想我的類的設計更改)。 另外,這種解決方案似乎有點不自然。 我真的不需要XML模式。 我有類及其序列化的XML實例。 添加架構似乎是多余的。
謝謝你
為什么不在設置類中創建可在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,您可以檢查類中的所有內容。 請記住,這是一個示例。 我認為管理對象驗證很好。 如果您當時更改了某些內容,則可以編輯驗證方法以檢查新情況。
遵循羅伯托的想法並將其進一步發展,您可以通過反射獲得所有屬性:
var props = yourClass.GetType().GetProperties()
在驗證功能內部,您可以使用以下方法遍歷這些屬性:
foreach(var prop in props) // or foreach(var prop in yourClass.GetType().GetProperties())
{
//...Validation of property
}
如果這些屬性之一具有其標准值,則將引發一個自定義異常,該異常告訴您未正確更新XML文件。
您可以使用版本允許序列化(VTS) https://msdn.microsoft.com/zh-cn/library/ms229752%28v=vs.110%29.aspx來實現
您需要在VTS功能中尋找序列化回調
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.