簡體   English   中英

如何在派生類中序列化具有不同名稱的基類變量

[英]how to serialize a base class variable with a different name in a derived class

這是一段示例代碼來解釋我的問題:

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")]當變量在同一個類中時執行此操作,但想知道是否可以在派生類中執行此操作? 如果是,如何?

根據您的評論,您似乎可以對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; }
}

有關為何如此有效的解釋,請參閱使用 ShouldSerialize 和 Reset 方法定義默認值

想到的一件事是使用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 傳遞將應用的自定義序列化屬性列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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