枚举的XML序列化

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

这是代码:

[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"); 

结果是:

   

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

谢谢。

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

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

我懂了:

 [System.Xml.Serialization.XmlIgnoreAttribute()] public bool TypeSpecified; 

在代码中我应该这样做:

 request.Type = REQUESTTypetype.One; request.TypeSpecified = true; 

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

将类型设置为“两个”或“三个”时,您是否看到同样的问题? 是因为“One”是默认值,所以可以假设? 可能是将此加载到XmlDocument中然后使用您未显示的代码(TestWriteXml)保存它的一些工件。

这个稍微修改过的代码版本(我写的是StringBuilder,最后是ToString’)…

  REQUEST request = new REQUEST(); request.ID = "1234"; request.Type = REQUESTTypetype.One; StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); XmlSerializer xs = new XmlSerializer(typeof(REQUEST)); xs.Serialize(sw, request); Console.WriteLine(sb.ToString()); 

…使用上面提到的完全相同的类型似乎工作正常。 我在控制台得到这个……

   

我没有更改REQUEST的定义或枚举REQUESTTypetype。

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

Kurt Claeys 在这里发表的博客文章也可能有所帮助。

在您的实际代码中,是成员:

  • 上市
  • read + write(对于fields:not readonly;对于properties:public get + set)
  • 公共类型

所有3必须是真的。 对于嵌套类型,嵌套中的每个父类型都必须是公共的。

其他会排除它的东西:

  • 可空和无效
  • 如果是DefaultValue
  • a ShouldSerialize或Specified返回false
  • 它是IxmlSerializable

尝试在枚举上放置[Flags]属性。