C#中序列化的使用总结

互联网 17-8-8
贴一下自己序列化的代码:
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);          //}      }

以上就是C#中序列化的使用总结的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 序列化
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:C#如何实现自动更新本地程序的实例分析

相关资讯