探讨:使用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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
php短域名转换为实际域名函数
Jan 17 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
浅谈php://filter的妙用
Mar 05 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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中有关长整数的一些操作教程
2019/09/11 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
python基础教程之lambda表达式使用方法
2014/02/12 Python
python实现计算倒数的方法
2015/07/11 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
会计专业自我鉴定
2014/02/10 职场文书
环保建议书400字
2014/05/14 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
年会邀请函范文
2015/01/30 职场文书
2015年度党员个人总结
2015/02/14 职场文书