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.XMLSe">

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

来源:这里教程网 时间:2026-02-21 13:23:14 作者:

<pre class="csharp">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></typeparam>
    public class DataContractSerializer<t>
    {
        /// <summary>
        /// 实体序列化成xml string
        /// </summary>
        /// <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>
        /// <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>
        /// <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>
        /// <param>IEnumerable<type>
        /// <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;
        }
    }
}</type></type></type></t>


以上就是c# 实体类序列化与反序列化二 (datacontractserializer) 的内容,更多相关内容请关注php中文网(www.php.cn)!

相关推荐