[英]Using XmlIgnoreAttribute to Ignore Base Class Property
我有一個抽象的基類,我已經添加了一些虛擬屬性。 我想要的是,在我的派生類中,指定在序列化(和反序列化過程)期間忽略特定的基類屬性。 如下所示, BaseClass
-class中的Value
-property被聲明為virtual
屬性,而在DerivedClass
-class中,使用overrides
-keyword,我選擇覆蓋基類的ppty,然后將XmlIgnoreAttribute
-Attribute放在它上面。 但是,當我測試代碼時,我仍然發現生成的XML中包含的Value
ppty用於派生類實例。 定義ppty也會發生同樣的事情,即使我使用new關鍵字將它隱藏在Derived類中,它也會被渲染,然后也將XMLIgnoreAttribute應用於它。 請問以下代碼有什么問題?
public abstract class BaseClass
{
public virtual String Value { get; set; }
public String Definition { get; set; }
[XmlAttribute("SeparatorCharacter")]
public virtual String SeparatorCharacter { get; set; }
}
public class DerivedClass:BaseClass
{
[XmlIgnore()]
public overrides String Value { get; set; }
[XmlAttribute("FillerCharacter")]
public String FillValue { get; set; }
[XmlIgnore()]
public new String Definition { get; set; }
}
序列化程序不會考慮覆蓋屬性的屬性,無論是為其提供屬性還是通過XmlAttributeOverrides
。 獲取所需行為的唯一部分解決方法是將虛擬ShouldSerializeValue
方法添加到基類,並在派生類中重寫它以禁止Value
的序列化。 這不會阻止Value
反序列化,但您可以將覆蓋設置器設置為空。
public abstract class BaseClass
{
public virtual String Foo { get; set; }
public virtual bool ShouldSerializeFoo () { return true ; }
}
public class DerivedClass:BaseClass
{
public override String Foo { get; set; }
public override bool ShouldSerializeFoo () { return false ; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.