探讨:使用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下载远程文件类(支持断点续传)
Nov 14 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
解析php中获取系统信息的方法
Jun 25 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
php统计数组不同元素的个数的实例方法
Sep 26 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 PHP
详解Laravel制作API接口
May 31 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数据库密码的找回的步骤
2011/01/12 PHP
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
详解python中requirements.txt的一切
2017/03/03 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
好的自荐信的要求
2013/10/30 职场文书
机修工岗位职责
2013/11/24 职场文书
建筑项目策划书
2014/01/13 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
给公司的建议书范文
2014/05/13 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server