借鉴cnblog的源码,开始做了一个简单的类及序列化,还比较顺利,后来做了一个包含索引的类,而索引本身又是一个类时遇到了麻烦(集合类)
始终出现错误:不应有 <*** xmlns=''>。//***指集合类名称.
后来试了一下,把开始做的那个不含集合类的XML文件中的元素名称改了,出现相同的错误,所以基本上确认是元素名称错了.
后来网上搜索,看到dudu也曾遇到过这类问题
http://www.cnblogs.com/dudu/archive/2004/03/24/4064.html
是因为集合类从CollectionBase继承,因此生成的元素名称为成员类的名称前加ArrayOf
这样做了,还是出现问题,
没办法,只好用.text自带的SerializationHelper.Save序列化这个集合类到一个XML文件中看看到底是什么,shit,居然是大小写的问题.
我的成员类是用的首字母小写,但集合类序列化后却生成的ArrayOf+首字母大写的成员类名
XML区分大小写我事先知道,但没想到序列化的类会自动转换为首字母大写,哎,都怪自己偷懒,没有按规范写成员类的名称首字母大写.
XML文件
<ArrayOfDepartment>
<Department>
<name>研发中心</name>
</Department>
<Department>
<name>营销中心</name>
</Department>
</ArrayOfDepartment>
[Serializable]
public
class
Department

{
public
Department()

{
}
private
string
_name;
public
string
name

{
get
{
return
this
._name;
}
set
{
this
._name
=
value;
}
}
}
[Serializable]
public
class
DepartmentCollection:CollectionBase

{
public
DepartmentCollection()

{
//
//
TODO: 在此处添加构造函数逻辑
//
}
public
Department
this
[
int
index]

{

get
{
return
((Department)(
this
.List[index]));}
}
public
int
Add(Department dp)

{
return
List.Add(dp) ;
}
}
public
static
object
Load(Type type,
string
filename)

{
FileStream fs
=
null
;
try
{
//
open the stream
fs
=
new
FileStream(filename, FileMode.Open,FileAccess.Read);
XmlSerializer serializer
=
new
XmlSerializer(type);
return
serializer.Deserialize(fs);
}
catch
(Exception e)

{
throw
e;
}
finally
{
if
(fs
!=
null
)
fs.Close();
}