探讨:使用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出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
php实现简单爬虫的开发
Mar 28 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
实例代码讲解Python 线程池
2020/08/24 Python
python help函数实例用法
2020/12/06 Python
泰国在线书店:SE-ED
2020/06/21 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
特色蛋糕店创业计划书
2014/01/28 职场文书
教学评估实施方案
2014/03/16 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
旅游项目合作意向书
2015/05/08 职场文书
公务员处分决定书
2015/06/25 职场文书
Django框架中表单的用法
2022/06/10 Python