序列化/反序列化枚举作为元素名称(而不是元素内容/值)

时间:2013-11-14 19:54:53

标签: c# xml xml-serialization xmlserializer

我需要反序列化/序列化XML,如下所示:

<color>
    <green/>
</color>

其中<green/>可能是<red/><blue/>等 - 非常大(但有限)设置。

我想在我的代码中将其描述为简单的枚举:

enum ColorName
{
    [XmlEnum("red")]
    Red,
    [XmlEnum("green")]
    Green,
    [XmlEnum("blue")]
    Blue,

    ...
    etc.
}

但是,如果我像这样编写我的对象模型:

class Color
{
    [XmlElement("name")]
    public ColorName ColorName;
}

class Something
{
    [XmlElement("color")]
    public Color Color;
}

枚举作为值而不是元素名称进入XML:

<color>
    <name>green</name>
</color>

有没有办法将枚举值写入XML元素名称(请参阅第一个XML代码段 - 这是目标),而不是XML元素值,而无需重新键入所有值(它是一个非常大的集合)作为空类名称,或诉诸自定义序列化(我想避免它,因为序列化类包含许多其他成员,默认情况下完全序列化)?

(我无法更改架构,它是第三方)。

1 个答案:

答案 0 :(得分:0)

不,只需使用[Xml*]属性解析您的类,就不支持此操作。您必须在Something上实施IXmlSerializable并自行完成。请注意,在大多数情况下,您不必费心使用GetSchema方法;实施ReadXmlWriteXml就好了。