首页 新闻 会员 周边 捐助

关于XML序列化

0
[已解决问题] 解决于 2007-11-23 14:22
如果要进行XML序列化的类中包含List<MyClass>属性,那么MyClass类必须包含无参构造函数,否则就会报错:序列化MyClass时出错,是这样吗?为什么呢?
问题补充: 错了,报的错误应该是 序列化xxx时出错,xxx为要序列化的类
麒麟.NET的主页 麒麟.NET | 老鸟四级 | 园豆:3614
提问于:2007-11-23 11:02
< >
分享
最佳答案
0
XML 序列化注意事项 使用 XmlSerializer 类时,应考虑下列情况: Sgen.exe 工具专门用于生成序列化程序集,以获得最佳性能。 序列化数据只包含数据本身以及类的结构。不包括类型标识和程序集信息。 只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。 类必须有一个将由 XmlSerializer 序列化的默认构造函数。 不能序列化方法。 XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类,条件是这些类满足某些要求,如下所示。 实现 IEnumerable 的类必须实现带单个参数的公共 Add 方法。Add 方法的参数必须与从 GetEnumerator 方法返回的 IEnumerator.Current 属性所返回的类型一致(多态)。 除实现 IEnumerable 外还实现 ICollection 的类(如 CollectionBase)必须有一个值为整数的公共 Item 索引属性(在 C# 中为索引器),并且必须有一个整数类型的公共 Count 属性。传递给 Add 方法的参数必须与从 Item 属性返回的类型相同或与该类型的某个基的类型相同。 对于实现 ICollection 的类,要序列化的值将从索引的 Item 属性检索,而不是通过调用 GetEnumerator 来检索。另外,除返回另一个集合类(实现 ICollection 的集合类)的公共字段之外,将不序列化其他公共字段和属性。有关示例,请参见 XML 序列化的示例。
大约在冬季 | 菜鸟二级 |园豆:230 | 2007-11-23 13:32
其他回答(3)
0
使用XmlSerializer序列化时 要序列化的类必须有一个默认的无参构造函数,用于序列化过程中创建新的对象。而且相应的属性必须为可读可写的。 使用System.Runtime.Serialization.Formatters.Soap.SoapFormatter则不需要默认的无参构造函数。
Anders Cui | 园豆:1570 (小虾三级) | 2007-11-23 13:33
0
呵呵,没有尝试过,不太清楚。 但是,我实现的一套Serialization机制中也需要被序列化的对象有默认构造函数。否则,很难确定怎样构造这个对象。 .NET 提供了一个TypeConverter.CreateInstance的支持,不知道系统的XmlSerializer有没有使用这套机制。你可以尝试一下。
Colin Han | 园豆:3041 (老鸟四级) | 2007-11-23 13:35
0

不是的,无餐构造函数几十你不写,编译器会自动生成,所以结果是不会报错的,我确定!

拖拉机CEO | 园豆:202 (菜鸟二级) | 2014-10-23 22:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册