探讨:使用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 相关文章推荐
模仿OSO的论坛(二)
Oct 09 PHP
真正的ZIP文件操作类(php)
Jul 21 PHP
php URL编码解码函数代码
Mar 10 PHP
PHP 命名空间实例说明
Jan 27 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
解析php如何将日志写进syslog
Jun 28 PHP
php分页示例分享
Apr 30 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
php实现的双向队列类实例
2014/09/24 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
angular多语言配置详解
2019/05/16 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
社区春季防火方案
2014/06/02 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
Windows server 2012搭建FTP服务器
2022/04/29 Servers