• 类的序列化到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();
       }

  • 相关阅读:
    学习进度
    移动端使用rem.js,解决rem.js 行内元素占位问题
    利用递归实现数组的扁平化
    ES6 新增声明变量的 var let const 的区别详解
    js学习笔记
    ajax中error函数参数与返回值详解 200 300 400 500
    处理 vue项目 打包后导致css文件引用静态目录路径异常的问题
    vue-cli3 配置 vue.config.js
    使用 vue-cli3 搭建一个项目
    vue-router params 和 query 的区别
  • 原文地址:https://www.cnblogs.com/zyk/p/72393.html
Copyright © 2020-2023  润新知