探讨:使用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 相关文章推荐
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
php实例化对象的实例方法
Nov 17 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
WINXP下apache+php4+mysql
2006/11/25 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
js实现双色球效果
2020/08/02 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python实现画循环圆
2019/11/23 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
预备党员综合考察材料
2014/05/31 职场文书
雷人标语集锦
2014/06/19 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
解决Python字典查找报Keyerror的问题
2021/05/26 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫