探讨:使用XMLSerialize 序列化与反序列化


Posted in PHP onJune 08, 2013

概念:XML序列化是将公共字段和属性转化为序列格式(这里指XML),以便存储或传输的过程。反序列化则是从XML中重新创建原始状态的对象.

    class SerializeDemo
    {
        static void Main()
        {
            EmployeeCollection employeeCollection = new EmployeeCollection()
            {
                Employees = Employeer.Employees()
            };
            XmlSerializer serialize = new XmlSerializer(typeof(EmployeeCollection));
            string filePath = @"E:\PProject\Test\Employee.xml";
             SerializeEmployee(serialize, filePath, employeeCollection);
            DeserializeEmployee(serialize, filePath);
        }
        static void SerializeEmployee(XmlSerializer serialize, string filePath, EmployeeCollection employeeCollection)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                serialize.Serialize(fs, employeeCollection);
            }
        }
        static void DeserializeEmployee(XmlSerializer serialize,string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                EmployeeCollection collection = (EmployeeCollection)serialize.Deserialize(fs);
                collection.Employees.ForEach(e => Console.WriteLine("Name:{0},Gender:{1},Age:{2},Education:{3}", e.userName, e.gender, e.age, e.education));
            }
        }
    }
    [Serializable]
    public class EmployeeCollection
    {
        public List<Employeer> Employees { get; set; }
    }
    [Serializable]
    public class Employeer
    {
        public string userId { get; set; }
        public string userName { get; set; }
        public string gender { get; set; }
        public int age { get; set; }
        public List<WorkExperience> workExperience { get; set; }
        public string education { get; set; }
        public static List<Employeer> Employees()
        {
           return new List<Employeer>()
           {
                new Employeer() 
                {   
                    userId = "0001",
                    userName = "guoHu",
                    gender="Man",
                    age=25,education="underGraduate",
                    workExperience = WorkExperience.GetWorkExperience("0001")
                }
           };        }
    }
    [Serializable]
    public class WorkExperience
    {
        public string userId { get; set; }
        public string companyName { get; set; }
        public string seniority { get; set; }
        public static List<WorkExperience> GetWorkExperience(string userId)
        {
            List<WorkExperience> workExperience = new List<WorkExperience>();
            Unity unity = Unity.GetInstance();
            DataTable table = new DataTable();
            unity.GetTable(out table);
            var experiences = (from experience in table.AsEnumerable()
                               where experience.Field<string>("UserId") == userId
                               select new
                               {
                                   companyName = experience.Field<string>("CompanyName"),
                                   seniority = experience.Field<string>("Seniority")
                               }).ToList();
            experiences.ForEach(e => workExperience.Add(new WorkExperience() { companyName = e.companyName, seniority = e.seniority }));
            return workExperience;
        }
    }
    public class Unity
    {
        public static DataTable tables = new DataTable();
        public static DataRow dr;
        public static DataColumn dc = new DataColumn();
        public static object objLock = new object();
        public static Unity unityInstance;
        private Unity()
        {
        }
        public static Unity GetInstance()
        {
            if (unityInstance == null)
            {
                lock (objLock)
                {
                    if (unityInstance == null)
                    {
                        unityInstance = new Unity();
                    }
                }
            }
            return unityInstance;
        }
        public void GetTable(out DataTable dt)
        {
            unityInstance.CreateTable();
            dr = tables.NewRow();
            dr["UserId"] = "0001";
            dr["CompanyName"] = "WireSoft";
            dr["Seniority"] = "2012.02-2012.05";
            tables.Rows.Add(dr);
            dr = tables.NewRow();
            dr["UserId"] = "0001";
            dr["CompanyName"] = "Jin Xun";
            dr["Seniority"] = "2009.07-2011.02";
            tables.Rows.Add(dr);
            dr = tables.NewRow();
            dr["UserId"] = "0002";
            dr["CompanyName"] = "Hua Wei";
            dr["Seniority"] = "2011.07-";
            tables.Rows.Add(dr);
            dt = tables.Copy();
        }
        public  void CreateTable()
        {
            dc = new DataColumn("UserId", System.Type.GetType("System.String"));
            tables.Columns.Add(dc);
            dc = new DataColumn("companyName", System.Type.GetType("System.String"));
            tables.Columns.Add(dc);
            dc = new DataColumn("seniority", System.Type.GetType("System.String"));
            tables.Columns.Add(dc);
        }
    }

PHP 相关文章推荐
PHP实现MySQL更新记录的代码
Jun 07 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
在PHP中设置、使用、删除Cookie的解决方法
May 06 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
php文件缓存类汇总
Nov 21 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
php中this关键字用法分析
Dec 07 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 #PHP
深入PHP内存相关的功能特性详解
Jun 08 #PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 #PHP
PHP跳转页面的几种实现方法详解
Jun 08 #PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 #PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 #PHP
php引用返回与取消引用的详解
Jun 08 #PHP
You might like
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
微信小程序收藏功能的实现代码
2018/06/12 Javascript
koa-router源码学习小结
2018/09/07 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python中sys.argv函数精简概括
2018/07/08 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
药品采购员岗位职责
2014/02/08 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
业务员岗位职责范本
2015/04/03 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android