探讨:使用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图片验证码代码
Mar 27 PHP
两个强悍的php 图像处理类1
Jun 15 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
php定时执行任务设置详解
Feb 06 PHP
PHP加密解密实例分析
Dec 25 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 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开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
2017/05/02 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jquery统计复选框选中示例
2013/11/05 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
浅谈react 同构之样式直出
2017/11/07 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
Python编程实现蚁群算法详解
2017/11/13 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
pow在python中的含义及用法
2019/07/11 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
淘宝活动策划方案
2014/02/06 职场文书
母亲节感恩寄语
2014/02/21 职场文书
21岁生日感言
2014/02/27 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
初中政治教学工作总结
2015/08/13 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书