簡體   English   中英

一種針對C#類驗證XML的簡單方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM