你能强制将枚举值序列化为整数吗?

时间:2008-09-22 20:20:40

标签: c# .net xml-serialization attributes

  

可能重复:
  How do I serialize an enum value as an int?

大家好!

我想知道是否有办法强制将枚举值序列化为整数值,而不是字符串表示。

让你进入上下文: 我们在一个严重依赖Web服务的Web应用程序中使用我们所有请求标头的单个基类,与请求类型无关。

我想在标题中添加一个Result字段,因此我们可以将提示传递回调用应用程序,以了解操作在Web服务端的运行方式。我们已经声明了这样的枚举,但由于我们有遗留应用程序调用那些可能不知道这些枚举的Web服务,我想将这些值序列化为整数。

我们已经不得不通过使用[XmlElement(ElementName =“string representationOfAttributeName”)]减少这些标头的长度,因为我们偶尔会超过IE最大网址长度,我想知道是否有类似的属性要强制将枚举值序列化为整数。

有人听说过这样的属性吗?

一如既往,感谢您的帮助, 帕斯卡

2 个答案:

答案 0 :(得分:6)

枚举确实序列化为整数。但一般来说,如果您不喜欢将某个属性序列化为XML的方式,那么您可以这样做:

[XmlIgnore]
public MyThing MyThing { get; set; }

[XmlElement("MyThing")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public string MyThingForSerialization
{
    get { return //convert MyThing to string; }
    set { MyThing = //convert string to MyThing; }
}

答案 1 :(得分:4)

枚举不会默认为int序列化。 我正在使用XMLSerializer序列化一个类,我遇到了与上述相同的问题。

(如果你将MyThingForSerialization的范围改为公开,Matt Howells的例子似乎有用,但我希望看到一个更好的实现,因为这会创建一个额外的公共属性)