zoukankan      html  css  js  c++  java
  • 类的序列化到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();
       }

  • 相关阅读:
    【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets
    【线段树成段更新成段查询模板】【POJ3468】A Simple Problem with Integerst
    HDU 6156 Palindrome Function 数位DP
    HDU 6154 CaoHaha's staff 思维 找规律
    Educational Codeforces Round 18 A B 码力 比赛
    Codeforces 815 B Karen and Test 杨辉三角 组合数学
    Codeforces 815 A Karen and Game 贪心
    POJ 1006 Biorhythms 中国剩余定理 数论
    Codeforces 818 E Card Game Again 线段树 思维
    Educational Codeforces Round 24-A B C D 思维
  • 原文地址:https://www.cnblogs.com/zyk/p/72393.html
Copyright © 2011-2022 走看看