我想将我的枚举值序列化为int,但我只得到名称.

以下是我的(示例)类和枚举:

public class Request {
    public RequestType request;
}

public enum RequestType
{
    Booking = 1,
    Confirmation = 2,
    PreBooking = 4,
    PreBookingConfirmation = 5,
    BookingStatus = 6
}

代码(只是为了确保我没有做错)

Request req = new Request();
req.request = RequestType.Confirmation;
XmlSerializer xml = new XmlSerializer(req.GetType());
StringWriter writer = new StringWriter();
xml.Serialize(writer, req);
textBox1.Text = writer.ToString();

This answer(对于另一个问题)似乎表明枚举应该作为缺省值序列化为整数,但它似乎没有做到这一点.以下是我的输出:

<?xml version="1.0" encoding="utf-16"?>
<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <request>Confirmation</request>
</Request>

通过将"[XmlEnum("X")]"属性放在每个值上,我可以将其序列化为值,但这似乎是错误的.

推荐答案

大多数情况下,人们想要名字,而不是整数.您可以为此添加填充属性吗?

[XmlIgnore]
public MyEnum Foo {get;set;}

[XmlElement("Foo")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public int FooInt32 {
    get {return (int)Foo;}
    set {Foo = (MyEnum)value;}
}

或者你可以使用IXmlSerializable,但这是大量的工作.

.net相关问答推荐

向从 .NET 序列化的对象添加 Xml 属性

在 C# 中输入按键

您如何确定两个 HashSet 是否相等(按值,而不是按引用)?

标签从右向左增长

ICommand MVVM 实现

如何以编程方式判断类型是 struct 还是类?

.NET 的 `Array.Sort()` 方法使用的排序算法是稳定的算法吗?

泛型方法是如何、何时、何地具体化的?

C# 有办法给我一个不可变的字典吗?

控制台应用程序的退出时

覆盖方法上的 C# 可选参数

ToLowerInvariant() 有什么问题?

C# (.NET) 设计缺陷

MVC4 HTTP 错误 403.14 - 禁止

如何重新启动 WPF 应用程序?

通过继承扩展枚举

System.Array.CopyTo() 和 System.Array.Clone() 之间的区别

.NET 桌面应用程序中的 Settings.settings 与 app.config

如何将我的应用程序窗口置于最前面?

为什么 IList 不支持 AddRange