xml 序列化问题,不知道是不是 .net 的Bug

whxbb 2002-12-06 11:59:22
以下程序运行正常

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Schema;

namespace Test
{
public class TestXmlSerializer
{
public static void Main()
{
try
{
Person person = new Person();
XmlSerializer serializer = new XmlSerializer(person.GetType());
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
Console.WriteLine("Serializer start.");
serializer.Serialize(writer, person);
Console.WriteLine("Serializer complete.");
Console.Write("Serializer result::");
Console.WriteLine(sb.ToString());
Console.WriteLine("Deserializ start.");
StringReader reader = new StringReader(sb.ToString());
serializer.Deserialize(reader);
Console.WriteLine("Deserializ ok.");
}
catch (Exception e)
{
Console.WriteLine("Error occurs:");
Console.WriteLine(e.Message);
}
}

}//name TestXmlSerializer
public class Person
{
public int Age;
public GenderGroup Gender;
public Person(){}
}
public enum GenderGroup
{
[XmlEnum("Boy")]
Male ,
[XmlEnum("Girl")]
Female
}
}//namespace Test

--------------------------------------------------------------------------

但是当我把枚举类改为:
public enum GenderGroup
{
[XmlEnum("Boy")]
Male = 0,
[XmlEnum("Girl")]
Female = 1
}
反序列化将失败,不知道这个问题该如何解决?
...全文
48 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
idiotzeng 2002-12-06
  • 打赏
  • 举报
回复
没错误吧
idiotzeng 2002-12-06
  • 打赏
  • 举报
回复
public GenderGroup Gender;

Gender默认值为0,即不时Male也不时Female
idiotzeng 2002-12-06
  • 打赏
  • 举报
回复
ms-help://MS.VSCC/MS.MSDNVS.2052/csref/html/vcrefTheEnumerationTypes.htm
"enum E 的默认值为表达式 (E)0 产生的值。"


在GenderGroup枚举中,强制元素序列从 1 而不是 0 开始。

所以会报错:"“0”不是 GenderGroup 的有效值。"

解决办法:
public class Person
{
public int Age;
public GenderGroup Gender;
public Person(){ this.Gender = GenderGroup.Male; }
}
whxbb 2002-12-06
  • 打赏
  • 举报
回复
抱歉,是枚举值不从0开始时出现错误。

public enum GenderGroup
{
[XmlEnum("Boy")]
Male = 1 ,
[XmlEnum("Girl")]
Female = 2
}
whxbb 2002-12-06
  • 打赏
  • 举报
回复
我的输出:
Serializer start.
Serializer complete.
Serializer result::<?xml versi
<Person xmlns:xsd="http://www.
g/2001/XMLSchema-instance">
<Age>0</Age>
<Gender>0</Gender>
</Person>
Deserializ start.
Error occurs:
XML 文档 (5, 3) 中有错误。
Press any key to continue




跟踪的详细信息是:
"“0”不是 GenderGroup 的有效值。"
dragon2002 2002-12-06
  • 打赏
  • 举报
回复
public enum GenderGroup
{
[XmlEnum("Boy")]
Male = 0,
[XmlEnum("Girl")]
Female = 1
}
这也没错
dragon2002 2002-12-06
  • 打赏
  • 举报
回复
public enum GenderGroup
{
[XmlEnum(Name="Boy")]
Male = 0,
[XmlEnum(Name="Girl")]
Female = 1
}
再试
idiotzeng 2002-12-06
  • 打赏
  • 举报
回复
我运行没错误,你把异常信息贴上来看看
whxbb 2002-12-06
  • 打赏
  • 举报
回复
当然有。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧