如何在派生类

时间:2016-04-18 08:19:10

标签: c# xml-serialization xmlserializer

以下是一段示例代码,用于解释我的问题:

public class TheBaseClass 
{
   public list<int> BaseClassList {get; set;}
}

public class TheDerivedClass : TheBaseClass
{
   //here I want to indicate the XmlSerializer to serialize the 'BaseClassList' with a different name 'DerivedClassList'
}

我知道当变量在同一个类中时如何使用[XmlElement( ElementName = "DesiredVarName")]但是想要知道是否可以在派生类中执行此操作?如果是,怎么样?

2 个答案:

答案 0 :(得分:1)

根据您的评论,您似乎可以对TheBaseClass进行更改。因此,您可以为基类中的BaseClassList属性添加虚拟bool ShouldSerialize{PropertyName}()方法,并返回true。然后在派生类中重写它并返回false,并引入具有所需名称的代理属性:

public class TheBaseClass
{
    public List<int> BaseClassList { get; set; }

    public virtual bool ShouldSerializeBaseClassList() { return true; }
}

public class TheDerivedClass : TheBaseClass
{
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DebuggerBrowsable(DebuggerBrowsableState.Never)]
    public List<int> DerivedClassList { get { return BaseClassList; } set { BaseClassList = value; } }

    public override bool ShouldSerializeBaseClassList() { return false; }
}

有关其工作原理的解释,请参阅Defining Default Values with the ShouldSerialize and Reset Methods

答案 1 :(得分:0)

我想到的一件事是使用XmlAttributeOverrides

var attributes = new XmlAttributes();
attributes.XmlElements.Add(new XmlElementAttribute("DerivedClassList"));
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(TheBaseClass), "BaseClassList", attributes);

var serializer = new XmlSerializer(typeof(TheDerivedClass), overrides);

在这个例子中,我们以编程方式向XmlSerializer传递一个将应用的自定义序列化属性列表。