贴一下自己序列化的代码:

public class XMLUtil    {        /// <summary>        /// XML & Datacontract Serialize & Deserialize Helper        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="serialObject"></param>        /// <returns></returns>        public static string Serializer<T>(T serialObject) where T : class        {            string result = string.Empty;            using (MemoryStream mem = new MemoryStream())            {                using (XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8))                {                    System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));                    ser.Serialize(writer, serialObject);                    result = Encoding.UTF8.GetString(mem.ToArray());                }            }            return result;        }        public static T Deserialize<T>(string str) where T : class        {            T result = null;            using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(str)))            {                using (StreamReader streamReader = new StreamReader(memoryStream))                {                    System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));                    result = (T)xmlSerializer.Deserialize(memoryStream);                }            }            return result;        }    }

上面的写法持续序列化不会有内存溢出的性能问题,之前一直被告知直接引用公司某位老鸟封装好的dll来序列化,后来发现了老是出现内存溢出,贴一下它的错误写法,仅供吸取教训:

public class XMLUtil    {        /// <summary>        /// XML & Datacontract Serialize & Deserialize Helper        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="serialObject"></param>        /// <returns></returns>        public static string Serializer<T>(T serialObject) where T : class        {            //try            //{            XmlSerializer ser = new XmlSerializer(typeof(T));            System.IO.MemoryStream mem = new MemoryStream();            XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);            ser.Serialize(writer, serialObject);            writer.Close();            return Encoding.UTF8.GetString(mem.ToArray());            //}            //catch (Exception ex)            //{            //    return null;            //}        }        public static T Deserialize<T>(string str) where T : class        {            //try            //{            XmlSerializer mySerializer = new XmlSerializer(typeof(T));            StreamReader mem2 = new StreamReader(                    new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)),                    System.Text.Encoding.UTF8);            return (T)mySerializer.Deserialize(mem2);            //}            //catch (Exception)            //{            //    return null;            //}        }        //public static string Json_SerializeObject(object value)        //{        //    return Newtonsoft.Json.JsonConvert.SerializeObject(value);        //}        //public static object Json_DeserializeObject(string value)        //{        //    return Newtonsoft.Json.JsonConvert.DeserializeObject(value);        //}        //public static T Json_DeserializeObject<T>(string value)        //{        //    return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(value);        //}    }

更多相关文章

  1. 原来斐波拉契数列还有这种写法,你知道吗?
  2. C++中动态内存分配与命名空间介绍
  3. C++中如何避免内存泄漏?
  4. c语言怎么实现动态内存分配
  5. 决定数组所占内存单元多少的是什么
  6. 在C语言里二维数组在内存中的存放顺序是什么?
  7. 在c语言中二维数组元素在内存中的存放顺序是什么?
  8. c语言数组在内存中是怎么分配的?
  9. 在c语言中char型数据在内存中的存储形式是什么?

随机推荐

  1. Go如何使用websocket实现弹幕功能
  2. golang是单进程的吗?
  3. golang如何释放map内存?
  4. 代码详解使用Go基于WebSocket构建视频直
  5. golang如何处理输入?
  6. PHP语法和Go语法有什么差异?对比介绍
  7. golang如何调用函数?
  8. golang是面向对象吗?
  9. 用Go实现字符串的逆序
  10. golang如何实现高并发?