【问题标题】:serialize/deserialize enum as element name (rather than element content/value)将枚举序列化/反序列化为元素名称(而不是元素内容/值)
【发布时间】:2013-11-28 00:29:47
【问题描述】:

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

<color>
    <green/>
</color>

其中&lt;green/&gt; 可能是&lt;red/&gt;&lt;blue/&gt; 等 - 非常大(但有限)的集合。

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

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 sn-p - 这就是目标),而不是 XML 元素值,而无需重新键入所有值(这是一个非常大的集合)作为空类名,或者诉诸自定义序列化(我想避免它,因为序列化的类包含很多其他成员,默认情况下是完美序列化的)?

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

【问题讨论】:

    标签: c# xml xml-serialization xmlserializer


    【解决方案1】:

    不,仅使用[Xml*] 属性装饰您的类是不支持的。你必须在Something 上实现IXmlSerializable 并自己做。请注意,在大多数情况下,您不必费心使用GetSchema 方法;实现ReadXmlWriteXml 就好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      相关资源
      最近更新 更多