C# 实体类序列化与反序列化二 (DataContractSerializer)

来源:互联网 发布:无标度网络特性 编辑:程序博客网 时间:2024/05/16 05:51
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.IO;using System.Xml;namespace Common.Utility.XMLSerialization{    /// <summary>    /// DataContractSerializer    /// </summary>    /// <typeparam name="T"></typeparam>    public class DataContractSerializer<T>    {        /// <summary>        /// 实体序列化成xml string        /// </summary>        /// <param name="meta"></param>        /// <returns></returns>        public static string ToXMLString(T meta)        {            DataContractSerializer dcs = new DataContractSerializer(typeof(T));            string xmlStr = string.Empty;            using (MemoryStream ms = new MemoryStream())            {                try                {                    dcs.WriteObject(ms, meta);                    xmlStr = Encoding.UTF8.GetString(ms.ToArray());                    ms.Close();                }                catch                {                    throw;                }            }            return xmlStr;        }        /// <summary>        /// DataContract序列化        /// </summary>        /// <param name="value"></param>        /// <param name="knownTypes">已知类型的集合</param>        /// <returns></returns>        public static string ToXMLString(object value, IEnumerable<Type> knownTypes = null)        {            try            {                DataContractSerializer dataContractSerializer = new DataContractSerializer(value.GetType(), knownTypes);                using (MemoryStream ms = new MemoryStream())                {                    dataContractSerializer.WriteObject(ms, value);                    ms.Seek(0, SeekOrigin.Begin);                    using (StreamReader sr = new StreamReader(ms))                    {                        return sr.ReadToEnd();                    }                }            }            catch            {                throw;            }        }        /// <summary>        /// 实体反序列化        /// </summary>        /// <param name="xml"></param>        /// <returns></returns>        public static T ReadFromXML(string xmlStr)        {            T meta;            try            {                DataContractSerializer dcs = new DataContractSerializer(typeof(T));                using (TextReader reader = new StringReader(xmlStr))                {                    using (XmlReader xReader = XmlReader.Create(reader))                    {                        meta = (T)dcs.ReadObject(xReader);                    }                }            }            catch            {                throw;            }            return meta;        }        /// <summary>        /// 实体反序列化        /// </summary>        /// <param name="xmlStr"></param>        /// <param name="knownTypes">IEnumerable<Type></param>        /// <returns></returns>        public static T ReadFromXML(string xmlStr, IEnumerable<Type> knownTypes = null)        {            T meta;            try            {                DataContractSerializer dcs = new DataContractSerializer(typeof(T), knownTypes);                using (TextReader reader = new StringReader(xmlStr))                {                    using (XmlReader xReader = XmlReader.Create(reader))                    {                        meta = (T)dcs.ReadObject(xReader);                    }                }            }            catch            {                throw;            }            return meta;        }    }}


拓展:点击打开链接

0 1
原创粉丝点击