打对了

实践Oracle优化技术在医疗信息化中的深入应用,探索医院信息系统性能优化设计之道。公众号:医信系统性能优化。

 

类的序列化到XML与XML反序列化到类


借鉴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();
   }

posted on 2004-12-03 11:57  知道得越多知道的越少  阅读(4474)  评论(0编辑  收藏  举报

导航