C# 派生类的XMLSerialization

C# 派生类的XMLSerialization,c#,.net,serialization,C#,.net,Serialization,我有两个班,一个是基班 public abstract class BaseBon : BaseRecord { public BaseBon(Nat recordIndicator) : base(recordIndicator) { } /// <summary> /// Waehrungkennzeichen - CurrencyCode /// </summary> protected FixedStrin

我有两个班,一个是基班

public abstract class BaseBon : BaseRecord
{
    public BaseBon(Nat recordIndicator) : base(recordIndicator)
    {
    }

    /// <summary>
    /// Waehrungkennzeichen - CurrencyCode
    /// </summary>
    protected FixedString m_CurrencyCode = new FixedString(3);
    public String CurrencyCode
    {
        get { return m_CurrencyCode.Value; }
        set { m_CurrencyCode.Value = value; }
    }

}
错误类型为System.InvalidOperationException。 我只能给你一个简短的翻译,因为我只有德语翻译。
该错误表明我屏蔽了基类的属性CurrencyCode,并且应该使用xmlementAttribute为其指定一个新名称。我该怎么做?因为我已经准备好使用
xmlement

,所以我认为类型不匹配的错误源是:返回CurrencyCode?和at属性货币代码。您必须在两种情况下使用相同的类型。更改了它,但它不起作用。问题是您的
公共新CurrencyCode
,我不明白您为什么不能给它一个新名称,因为它显然与现有定义的名称冲突。这就产生了一个问题,你的类是否真的基于你的BaseBon。为什么不提供一个名为EnumCurrencyCode的新属性,并保持现有序列化不变?@Icepickle源代码所属的这个库是另一种语言的端口。因此,当涉及到文档时,该类是基于BaseBon的。目前我正在使用您的方法,但我想知道是否可以简单地避免;)我认为类型不匹配的错误来源是:返回CurrencyCode?和at属性货币代码。您必须在两种情况下使用相同的类型。更改了它,但它不起作用。问题是您的
公共新CurrencyCode
,我不明白您为什么不能给它一个新名称,因为它显然与现有定义的名称冲突。这就产生了一个问题,你的类是否真的基于你的BaseBon。为什么不提供一个名为EnumCurrencyCode的新属性,并保持现有序列化不变?@Icepickle源代码所属的这个库是另一种语言的端口。因此,当涉及到文档时,该类是基于BaseBon的。目前我正在使用您的方法,但我想知道是否可以简单地避免;)
/// <summary>
/// Waehrungkennzeichen - CurrencyCode
/// </summary>
private new FixedInt m_CurrencyCode = new FixedInt(1);
[XmlElement("CurrencyCode_Small",typeof(CurrencyCode?))]
public new CurrencyCode? CurrencyCode
{
    get
    {
        CurrencyCode? val = null;
        Array values = Enum.GetValues(typeof(CurrencyCode));
        foreach (CurrencyCode value in values)
        {
            if (value.GetValue().Equals(m_CurrencyCode.Value))
            {
                val = value;
                break;
            }
        }
        return val;
    }
    set
    {
        if (!value.Equals(null))
        {
            m_CurrencyCode.Value = (int)value;
        }
    }
}