1

クラス[Serializable] Currencyには 2 つのフィールドとXmlElementリフレクション属性があります。

[XmlElement("currencyname")]
CurrencyValue m_Value { get; }

[XmlElement("exchangerate")]
public decimal exchangeRate { get; set; }

CurrencyValueCurrencyクラスの外にある列挙型です。

私は[XmlEnum("...")]属性を使用しようとしましたが、クラス内で設定された列挙値を「プル」しようとしました。

[XmlElement("Value")]
public CurrencyValue m_value
{
    get { return m_value.ToString(); }
}

しかし、役に立たない。クラス メソッドToXML()は次のようになります。

public string ToXML(bool indent = false, bool omitXmlDeclaration = true, bool includeDefaultNamespaces = false)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Currency));
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

    if (!includeDefaultNamespaces)
    {
        ns.Add("", "");
    }

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Encoding = new UnicodeEncoding(false, false);
    settings.Indent = indent;
    settings.OmitXmlDeclaration = omitXmlDeclaration;

    using (StringWriter stringWriter = new StringWriter())
    {
        using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, settings))
        {
            serializer.Serialize(xmlWriter, this, ns);
            return stringWriter.ToString();
        }
    }
}

私の質問は、そのような列挙型をオブジェクトのシリアル化に含めることができますか? クラス自体に含めない理由はわかりませんが、この列挙型が他の場所で使用されている可能性があり、その場所を変更することはできません。

4

1 に答える 1

1

残念ながら、XmlSerializer は public セッターのないメンバーを無視します。セッター (使用したくない場合は、単にスローするものでも) を追加し、プロパティがパブリックであることを確認すると、正常に動作するはずです。XmlEnum 属性も必要ありません。

于 2012-09-27T17:29:09.660 に答える