【问题标题】:Can you force the serialization of an enum value into an integer? [duplicate]您可以强制将枚举值序列化为整数吗? [复制]
【发布时间】:2008-09-22 20:20:39
【问题描述】:

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

大家好!

我想知道是否有一种方法可以强制将枚举值序列化为其整数值,而不是其字符串表示形式。

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

我想在标题中添加一个 Result 字段,因此我们将有一个地方可以将有关操作如何在 Web 服务端进行的提示传递回调用应用程序。我们已经为此声明了一个枚举,但由于我们有旧版应用程序调用那些可能不知道这些枚举的 Web 服务,所以我想将这些值作为整数发送。

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

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

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

【问题讨论】:

    标签: c# .net xml-serialization attributes


    【解决方案1】:

    枚举确实序列化为整数。但一般来说,如果您不喜欢其中一个属性被序列化为 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; }
    }
    

    【讨论】:

    • 请注意,MyThingForSerialization 必须是公开的。 XmlSerializer 不会查看私有字段/属性。
    • @Miral 我已经添加了 EditorBrowsableBrowsable 属性来解决这个问题。
    • 非常好...也为我工作,因此我也可以运行转换解释器,因为文件存储的访问级别很奇怪。
    • @matt Howells:Enum 是否会序列化为 int?我想在不使用 xmlenumattribute 并且不创建新的公共属性的情况下做到这一点。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      相关资源
      最近更新 更多