我需要反序列化/序列化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元素值,而不必将所有值(非常大的集合)重新键入为空类名,或者诉诸自定义序列化(我想避免它,因为序列化类包含许多其他成员,默认情况下是完全序列化的)?
(我不能更改架构,它是第三方的)。
发布于 2013-11-14 20:04:44
不,这不是通过简单地用[Xml*]属性装饰类来支持的。您必须在IXmlSerializable上实现Something并自己实现。注意,在大多数情况下,您不必费心使用GetSchema方法;实现ReadXml和WriteXml是很好的。
https://stackoverflow.com/questions/19987094
复制相似问题