在类外定义时,在序列化中包含枚举

时间:2012-09-27 14:56:04

标签: c# xml serialization reflection

课程[Serializable] Currency有两个字段和XmlElement个反射属性:

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

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

CurrencyValue是一个位于Currency类之外的枚举。

我尝试使用[XmlEnum("...")]属性,并尝试使用

“拉”类内的set枚举值
[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();
        }
    }
}

我的问题是:这样的枚举可以包含在我的对象的序列化中吗? 我没有理由不将它包含在类本身中,但是这个枚举可能在其他地方使用并且改变它的位置对我有利并不是一种选择。

1 个答案:

答案 0 :(得分:1)

可悲的是,XmlSerializer将忽略没有公共setter的成员。添加一个setter(如果你不想使用它,就会抛出一个setter)并确保该属性是公共的,它应该可以正常工作。您甚至不需要XmlEnum属性。

相关问题