我需要反序列化/序列化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元素值,而无需重新键入所有值(它是一个非常大的集合)作为空类名称,或诉诸自定义序列化(我想避免它,因为序列化类包含许多其他成员,默认情况下完全序列化)?
(我无法更改架构,它是第三方)。
答案 0 :(得分:0)
不,只需使用[Xml*]
属性解析您的类,就不支持此操作。您必须在Something
上实施IXmlSerializable
并自行完成。请注意,在大多数情况下,您不必费心使用GetSchema
方法;实施ReadXml
和WriteXml
就好了。