枚举的XML序列化

eta*_*rvt 9 c# enums xml-serialization

我在序列化枚举值时遇到问题.

这是代码:

[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class REQUEST
{
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string ID;

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public REQUESTTypetype Type;
}

public enum REQUESTTypetype
{
    One,
    Two,
    Three,
    Four,
}

...

REQUEST request = new REQUEST();
request.ID = "1234";
request.Type = REQUESTTypetype.One;

XmlDocument doc = new XmlDocument();
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
XmlSerializer xs = new XmlSerializer(typeof(REQUEST));
xs.Serialize(sw, request_group);
ms.Position = 0;
doc.Load(ms);
TestWriteXml(doc, @"C:\xml_test.xml");
Run Code Online (Sandbox Code Playgroud)

结果是:

<?xml version="1.0" encoding="utf-8" ?> 
<REQUEST ID="1234" />
Run Code Online (Sandbox Code Playgroud)

为什么枚举不是序列化的?我使用.NET Framework 2.0.

谢谢.

eta*_*rvt 17

我发现了什么问题.对于每个枚举类型

[System.Xml.Serialization.XmlAttributeAttribute()]
public REQUESTTypetype Type;
Run Code Online (Sandbox Code Playgroud)

我懂了:

[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool TypeSpecified;
Run Code Online (Sandbox Code Playgroud)

在代码中我应该这样做:

request.Type = REQUESTTypetype.One;
request.TypeSpecified = true;
Run Code Online (Sandbox Code Playgroud)

它现在工作正常.我应该在我的问题中发布它们,但我根本没注意这些"指定的"成员.谢谢你的回复.


TLi*_*ebe 0

您可以使用 Xml.Serialization.XmlEnum 属性(请参阅此处)来修饰枚举的值。

Kurt Claeys 的一篇博客文章可能也有帮助。