我有一个抽象基类,我已经添加了一些虚拟属性。我想要的是,在我的派生类中,指定在序列化(和反序列化过程)期间忽略特定的基类属性。如下所示,Value
- 类中的BaseClass
- 属性被声明为virtual
属性,而在DerivedClass
- 类中,使用overrides
- 关键字,我选择覆盖基类的ppty,然后将XmlIgnoreAttribute
- 属性放在上面。但是,当我测试代码时,我仍然发现生成的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; }
}
答案 0 :(得分:6)
序列化程序不会考虑覆盖属性的属性,无论是为其提供属性还是通过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 ; }
}