写了个序列化反序列化助手
生活随笔
收集整理的這篇文章主要介紹了
写了个序列化反序列化助手
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/// <summary>/// 序列化助手/// 提供 BinaryFormatter,SoapFormatter,Xml序列化及相應序列化至文件的方法。/// </summary>public static class SerializeHelper{/// <summary>/// 將一個對象序列化為二進制流/// </summary>/// <param name="value">欲序列化的對象</param>/// <returns>byte[] 二進制流</returns>public static byte[] BinarySerialize<T>(T value){if (value == null) return null;byte[] serializedObject;MemoryStream ms = new MemoryStream();BinaryFormatter b = new BinaryFormatter();b.Serialize(ms, value);ms.Seek(0, 0);serializedObject = ms.ToArray();ms.Close();return serializedObject;}/// <summary>/// 將二進制流反序列化為一個對象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="serializedObject"></param>/// <returns></returns>public static T BinaryDeserialize<T>(byte[] serializedObject){using (MemoryStream ms = new MemoryStream()){ms.Write(serializedObject, 0, serializedObject.Length);ms.Seek(0, 0);BinaryFormatter b = new BinaryFormatter();return (T)b.Deserialize(ms);}}/// <summary>/// 將一個對象進行Soap序列化/// </summary>/// <param name="value">欲序列化的對象</param>/// <param name="endcodingType">字符編碼</param>/// <returns>Soap數據流</returns>public static string SoapSerialize<T>(T value, Encoding endcodingType){if (value == null) return null;string xmlResult;using (Stream stream = new MemoryStream()){try{SoapFormatter sf = new SoapFormatter();sf.Serialize(stream, value);}catch{ throw;}stream.Position = 0;byte[] b = new byte[stream.Length];stream.Read(b, 0, (int)stream.Length);xmlResult = endcodingType.GetString(b, 0, b.Length);}return xmlResult;}/// <summary>/// 反序列化Soap數據流/// </summary>/// <typeparam name="T">返回對象的類型</typeparam>/// <param name="imput">Soap數據流</param>/// <param name="encodingType">字符編碼</param>/// <returns>對象</returns>public static T SoapDeserialize<T>(string imput, System.Text.Encoding encodingType){using (StringReader sr = new StringReader(imput)){byte[] b;b = encodingType.GetBytes(imput);Stream stream = new MemoryStream(b);try{SoapFormatter sf = new SoapFormatter();return (T)sf.Deserialize(stream);}catch { throw;}}}/// <summary>/// 將一個對象進行Xml序列化/// </summary>/// <typeparam name="T">欲序列化對象類型</typeparam>/// <param name="value">欲序列化的對象</param>/// <returns>>Xml數據流</returns>public static string XmlSerialize<T>(T value){if (value == null) return null;XmlSerializer serializer = new XmlSerializer(typeof(T));XmlWriterSettings settings = new XmlWriterSettings();settings.Encoding = new UnicodeEncoding(false, false);settings.Indent = false;settings.OmitXmlDeclaration = false;using (StringWriter textWriter = new StringWriter()){using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings)){serializer.Serialize(xmlWriter, value);}return textWriter.ToString();}}/// <summary>/// 反序列化Xml數據流/// </summary>/// <typeparam name="T">返回對象的類型</typeparam>/// <param name="xml">Xml數據流</param>/// <returns>對象</returns>public static T XmlDeserialize<T>(string xml){if (string.IsNullOrEmpty(xml)) return default(T);XmlSerializer serializer = new XmlSerializer(typeof(T));XmlReaderSettings settings = new XmlReaderSettings();using (StringReader textReader = new StringReader(xml)){using (XmlReader xmlReader = XmlReader.Create(textReader, settings)){return (T)serializer.Deserialize(xmlReader);}}}/// <summary>/// 將一個對象序列化成一個文件/// </summary>/// <param name="value">欲序列化的對象</param>/// <param name="filePath">文件及路徑</param>/// <returns>是否序列化成功</returns>public static bool FileBinarySerialize<T>(T value, string filePath){if (value == null) return false;FileStream fileStream = null;try{fileStream = new FileStream(filePath, FileMode.Create);BinaryFormatter b = new BinaryFormatter();b.Serialize(fileStream, value);}catch{return false;throw;}finally{if (fileStream != null)fileStream.Close();}return true;}/// <summary>/// 將一個文件反序列化(Binary)為一個對象/// </summary>/// <typeparam name="T">對象的類型</typeparam>/// <param name="filePath">文件及路徑</param>/// <returns>對象</returns>public static T FileBinaryDeserialize<T>(string filePath){FileStream fileStream = null;try{if (File.Exists(filePath) == false)throw new FileNotFoundException("未找到文件,反序列化失敗!", filePath);fileStream = new FileStream(filePath, FileMode.Open);BinaryFormatter b = new BinaryFormatter();return (T)b.Deserialize(fileStream);}catch{throw;}finally{if (fileStream != null)fileStream.Close();}}/// <summary>/// 將一個對象序列化(Soap)成一個文件/// </summary>/// <typeparam name="T">對象的類型</typeparam>/// <param name="value">欲序列化的對象</param>/// <param name="endcodingType">字符編碼</param>/// <param name="filePath">文件及路徑</param>/// <returns>是否序列化成功</returns>public static bool FileSoapSerialize<T>(T value, Encoding endcodingType,string filePath){if (value == null) return false;string xmlResult;using (Stream stream = new MemoryStream()){try{SoapFormatter sf = new SoapFormatter();sf.Serialize(stream, value);}catch{throw;}stream.Position = 0;byte[] b = new byte[stream.Length];stream.Read(b, 0, (int)stream.Length);xmlResult = endcodingType.GetString(b, 0, b.Length);using (StreamWriter sw = new StreamWriter(filePath)){sw.WriteLine(xmlResult);}}return true;}/// <summary>/// 將一個文件反序列化(Soap)為一個對象/// </summary>/// <typeparam name="T">對象的類型</typeparam>/// <param name="filePath">文件及路徑</param>/// <param name="encodingType">字符編碼</param>/// <returns>對象</returns>public static T FileSoapDeserialize<T>(string filePath, System.Text.Encoding encodingType){if (!File.Exists(filePath)) return default(T);using (StreamReader streamReader = new StreamReader(filePath)){using (StringReader textReader = new StringReader(streamReader.ReadToEnd())){byte[] b;b = encodingType.GetBytes(textReader.ReadToEnd());Stream stream = new MemoryStream(b);try{SoapFormatter sf = new SoapFormatter();return (T)sf.Deserialize(stream);}catch{throw;}}}}/// <summary>/// 將一個對象序列化(Xml)成一個文件/// </summary>/// <typeparam name="T">對象的類型</typeparam>/// <param name="value">欲序列化的對象</param>/// <param name="filePath">文件及路徑</param>/// <returns>是否序列化成功</returns>public static bool FileXmlSerialize<T>(T value, string filePath){if (value == null) return false;XmlSerializer serializer = new XmlSerializer(typeof(T));XmlWriterSettings settings = new XmlWriterSettings();settings.Encoding = new UnicodeEncoding(false, false);settings.Indent = false;settings.OmitXmlDeclaration = false;using (StringWriter textWriter = new StringWriter()){using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings)){serializer.Serialize(xmlWriter, value);}using (StreamWriter sw =new StreamWriter(filePath)){sw.WriteLine(textWriter.ToString());}}return true;}/// <summary>/// 將一個文件反序列化(Xml)為一個對象/// </summary>/// <typeparam name="T">對象的類型</typeparam>/// <param name="filePath">文件及路徑</param>/// <returns>對象</returns>public static T FileXmlDeserialize<T>(string filePath){if (!File.Exists(filePath)) return default(T);XmlSerializer serializer = new XmlSerializer(typeof(T));XmlReaderSettings settings = new XmlReaderSettings();using (StreamReader sr = new StreamReader(filePath)){using (StringReader textReader = new StringReader(sr.ReadToEnd())){using (XmlReader xmlReader = XmlReader.Create(textReader, settings)){return (T)serializer.Deserialize(xmlReader);}}}}}
轉載于:https://www.cnblogs.com/lindj0307/archive/2012/07/21/2602025.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的写了个序列化反序列化助手的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RNQOJ 98 逃亡的准备
- 下一篇: IE6 下图片少一块