博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列化和反序列化
阅读量:5104 次
发布时间:2019-06-13

本文共 3223 字,大约阅读时间需要 10 分钟。

 

        /// <summary>
        /// xml序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string SaveXmlFromObj<T>(T obj)
        {
            try
            {
                if (obj == null) return null;
                XmlSerializer serializer;
                serializer = new XmlSerializer(typeof(T));
                MemoryStream stream = new MemoryStream();
                XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8);
                xtw.Formatting = Formatting.Indented;
                try
                {
                    serializer.Serialize(stream, obj);
                }
                catch { return null; }
                stream.Position = 0;
                string returnStr = string.Empty;
                using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
                {
                    string line = "";
                    while ((line = sr.ReadLine()) != null)
                    {
                        returnStr += line;
                    }
                }
                return returnStr;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
 
        /// <summary>
        /// xml反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        public static T LoadObjFromXML<T>(string data)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
                {
                    sw.Write(data);
                    sw.Flush();
                    stream.Seek(0, SeekOrigin.Begin);
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    try
                    {
                        return ((T)serializer.Deserialize(stream));
                    }
                    catch { return default(T); }
                }
            }
        }
       /// <summary>
        /// Dictionary序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string DicToXml<T>(T obj)
        {
            try
            {
                if (obj == null) return null;
                DataContractSerializer dataSerializer;
                dataSerializer = new DataContractSerializer(typeof(T));
                var ms = new MemoryStream();
                try
                {
                    dataSerializer.WriteObject(ms, obj);
                }
                catch { return null; }
                ms.Position = 0;
                var sr = new StreamReader(ms);
                var str = sr.ReadToEnd();
                return str.ToString();
            }
            catch
            {
                return null;
            }
        }
 
        /// <summary>
        /// Dictionary反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data"></param>
        /// <returns></returns>
        public static T XmlToDic<T>(string data)
        {
            DataContractSerializer dataSerializer;
            dataSerializer = new DataContractSerializer(typeof(T));
            var buffer = System.Text.Encoding.UTF8.GetBytes(data);
            var ms = new MemoryStream(buffer);
            try
            {
                return (T)dataSerializer.ReadObject(ms);
            }
            catch
            {
                return default(T);
            }
        }
 
        /// <summary>
        /// 二进制把对象序列化并返回相应的字节
        /// </summary>
        /// <param name="pObj">需要序列化的对象</param>
        /// <returns>byte[]</returns>
        public byte[] SerializeObject(object pObj)
        {
            if (pObj == null)
                return null;
            System.IO.MemoryStream _memory = new System.IO.MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(_memory, pObj);
            _memory.Position = 0;
            byte[] read = new byte[_memory.Length];
            _memory.Read(read, 0, read.Length);
            _memory.Close();
            return read;
        }
 
 
        /// <summary>
        /// 二进制把字节反序列化成相应的对象
        /// </summary>
        /// <param name="pBytes">字节流</param>
        /// <returns>object</returns>
        public object DeserializeObject(byte[] pBytes)
        {
            object _newOjb = null;
            if (pBytes == null)
                return _newOjb;
            System.IO.MemoryStream _memory = new System.IO.MemoryStream(pBytes);
            _memory.Position = 0;
            BinaryFormatter formatter = new BinaryFormatter();
            _newOjb = formatter.Deserialize(_memory);
            _memory.Close();
            return _newOjb;
        }

 

转载于:https://www.cnblogs.com/jiangfei1227/p/3784088.html

你可能感兴趣的文章
PyQt5--EventSender
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
Java 多态 虚方法
查看>>
Unity之fragment shader中如何获得视口空间中的坐标
查看>>
万能的SQLHelper帮助类
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
Html5 离线页面缓存
查看>>
《绿色·精简·性感·迷你版》易语言,小到不可想象
查看>>
Android打包key密码丢失找回
查看>>
VC6.0调试技巧(一)(转)
查看>>
类库与框架,强类型与弱类型的闲聊
查看>>
webView添加头视图
查看>>
php match_model的简单使用
查看>>
在NT中直接访问物理内存
查看>>
Intel HEX 文件格式
查看>>
SIP服务器性能测试工具SIPp使用指导(转)
查看>>
php_扑克类
查看>>
回调没用,加上iframe提交表单
查看>>
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>