枚举的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]属性。
- 是否可以将项目从Enum加载到.NET 3.5中的ComboBox?
- 使用WPF中的MVVM模式在运行时加载XAML
- 如果HTTP_X_FORWARDED_FOR包含多个IP地址,如何从IP_X_FORWARDED_FOR获取正确的IP?
- 知道hypoteneuse有效地计算所有毕达哥拉斯三元组
- autocompletebox专注于wpf
- Hololens应用程序将不再构建 – 引用元数据文件丢失并且找不到c-Sharp.firstpass
- 使用iTextSharp在底部的PDF页脚
- 无法将LongListSelector.SelectedItem绑定到MVVM属性
- HttpRuntime.Cache在哪里存储数据?