我說得對理解.NET XmlIgnoreAttribute,它說:XmlIgnoreAttribute,僅在序列化期間使用,而不是在反序列化期間使用?
指示的XmlSerializer的Serialize方法不序列化公共字段或公共讀/寫屬性值。
說:
- 的財產將被反序列化,如果存在XML文件中?
- 該屬性不會被序列化爲新的XML文件?
我問的原因是我用一個更新的選項替換了文件中的一個屬性。舊屬性是一個簡單的布爾屬性,新屬性是一個枚舉。根據舊屬性在添加新屬性之前的意思,我已經更改舊屬性,以便將新屬性的值轉換爲布爾值,get和set都已實現。
這使我可以通過閱讀舊屬性(設置新屬性)和序列化後添加新屬性來靜默升級新文件。
但是,我想從新的xml文件中刪除舊的屬性,所以我想知道如果我用[XmlIgnore]
標記它會發生什麼,舊的xml文件是否仍然正確反序列化並從該文件讀取該屬性,或者它會被完全忽略嗎?
如果不是,下面的改變會做我想要的嗎?
[XmlAttribute("is-list")]
[DefaultValue(false)]
public bool IsList
{
get { return false; }
set {
if (value)
ListHandling = ListHandling.All;
}
}
這將返回所有新對象,因爲我已經指定了默認值,它會被忽略假的,如果出現在一箇舊文件,並設置爲true,將改變ListHandling屬性,它是新的重要。
編輯:經過測試,我已驗證兩種方法似乎都是按照我想要的方式進行的。儘管如此,我仍然會留下問題,因爲我仍然想知道上面提到的第一個行爲是否僅僅是實現細節,或者是否可以這樣理解文檔。
好的,謝謝,那麼我想我的測試顯示它做了什麼是愚蠢的運氣。猜測我的第二個實現是我想要使用的那個。 – 2010-02-28 08:36:33
如果將[XmlIgnore]置於子類/覆蓋屬性上,則該屬性將被忽略,並且該值將被序列化並反序列化。 – Sven 2016-10-25 13:25:50