繁体   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