探讨:使用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中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP实现利用MySQL保存session的方法
Aug 23 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
PHP异常处理Exception类
Dec 11 PHP
微信支付开发维权通知实例
Jul 12 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
JS分页效果示例
2013/10/11 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python传递参数方式小结
2015/04/17 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python 多线程串行和并行的实例
2019/02/22 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Keras设置以及获取权重的实现
2020/06/19 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Windows和Linux动态库应用异同
2016/04/17 面试题
网络技术专业求职信
2014/02/18 职场文书
努力学习演讲稿
2014/05/10 职场文书
教师求职自荐书
2014/06/14 职场文书
党支部特色活动方案
2014/08/20 职场文书
员工保密协议书
2014/09/27 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
合理化建议书范文
2015/09/14 职场文书