簡體   English   中英

使用XmlIgnoreAttribute忽略基類屬性

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

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