c# xml序列化和反序列化

来源:互联网 发布:当当网的价值网络 编辑:程序博客网 时间:2024/05/20 14:25

1.首先解释一下名次含义:

序列化将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

反序列化与之相反将可存储或可传输的形式转换为对象的状态信息。这里不再多说

直接上代码:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Serialization;namespace NewXml{    /// <summary>    /// Xml序列化与反序列化    /// </summary>    public class XmlUtil    {        #region 反序列化        /// <summary>        /// Xml反序列化成T        /// </summary>        /// <param name="type">类型</param>        /// <param name="xml">XML字符串</param>        /// <returns></returns>        public static T XmlDeserialize<T>(string xml) where T:class,new()        {            try            {                using (StringReader sr = new StringReader(xml))                {                    XmlSerializer xmldes = new XmlSerializer(typeof(T));                    return xmldes.Deserialize(sr) as T;                }            }            catch (Exception)            {                return default(T);            }        }        /// <summary>        /// Xml Stream反序列化成T        /// </summary>        /// <param name="type"></param>        /// <param name="xml"></param>        /// <returns></returns>        public static T XmlDeserialize<T>(Stream stream) where T:class,new()        {            try            {                XmlSerializer xmldes = new XmlSerializer(typeof(T));                return xmldes.Deserialize(stream) as T;            }            catch            {                return default(T);            }        }        #endregion        #region 序列化        /// <summary>        /// object序列化成Xml字符串        /// </summary>        /// <param name="type">类型</param>        /// <param name="obj">对象</param>        /// <returns></returns>        public static string XmlSerializer(object t)        {            MemoryStream Stream = new MemoryStream();            XmlSerializer xml = new XmlSerializer(t.GetType());            try            {                //序列化对象                xml.Serialize(Stream, t);            }            catch (InvalidOperationException)            {                throw;            }            Stream.Position = 0;            StreamReader sr = new StreamReader(Stream);            string str = sr.ReadToEnd();            sr.Dispose();            Stream.Dispose();            return str;        }        #endregion    }}

2.使用方法:

List<Student> stu1 = new List<Student>             {                 new Student{Name = "okbase", Age = 10},                new Student{Name = "张三", Age = 15},                new Student{Name = "李四", Age = 20},            };            string xml = XmlUtil.XmlSerializer(stu1);            Console.WriteLine(xml);            stu1 = XmlUtil.XmlDeserialize<List<Student>>(xml);            foreach (var stu in stu1)            {                Console.WriteLine(stu.Name);            }

普通对象,集合,datatable等均可以使用进行序列化,反序列化。

DataTable序列化:

 DataTable dt = new DataTable("mytable");   // 必须指明DataTable名称            dt.Columns.Add("Dosage", typeof(int));            dt.Columns.Add("Drug", typeof(string));            dt.Columns.Add("Patient", typeof(string));            dt.Columns.Add("Date", typeof(DateTime));            // 添加行            dt.Rows.Add(25, "Indocin", "David", DateTime.Now);            dt.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);            dt.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);            dt.Rows.Add(21, "Combivent", "Janet", DateTime.Now);            dt.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);            // 序列化            string xml = XmlUtil.XmlSerializer(dt);            Console.Write(xml);


0 0