/// <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

写了个序列化反序列化助手相关推荐

  1. 序列化反序列化api(入门级)

    定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...

  2. 高效的序列化/反序列化数据方式 Protobuf

    高效的序列化/反序列化数据方式 Protobuf github地址 目录 protocolBuffers 序列化 Int32 String Map slice 序列化小结 protocolBuffer ...

  3. 10.8-全栈Java笔记:序列化/反序列化的步骤和实例

    本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...

  4. java序列化 反序列化_Java序列化– Java序列化

    java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...

  5. Openssl ECC椭圆曲线算法 - 密钥/签名/验签/加密/解密/SM2密文 - 序列化反序列化导出导入 - C源码

    . . . . 废话不多说,本代码继承自另外一位讲解Openssl ECC椭圆曲线算法大佬的源代码:https://blog.csdn.net/scuyxi/article/details/59182 ...

  6. avro数据序列化/反序列化

    序列化:把数据加工成特定的格式 反序列化:把特定格式的数据解析成对象 Avro提供了两种序列化和反序列化的方式:一种是通过Schema文件来生成代码的方式,一种是不生成代码的通用方式,这两种方式都需要 ...

  7. 什么是序列化?反序列化? 场景使用? 怎么实现???

    今天煌sir来带你扫扫盲, 关于什么是序列化?反序列化? 场景使用?  怎么实现??? 或许我们平时大概知道, 嗯,序列化,就是实现 Serializable 接口, 那再问你,怎么实现的, 或许你就 ...

  8. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  9. Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释

    今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...

最新文章

  1. python close函数_Matplotlib的close()函数使Tkinter GUI窗口关闭
  2. java中注解的使用_java中注解的使用
  3. UA MATH571B 试验设计 2k析因设计理论上
  4. 子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...
  5. Spring Cloud Gateway 源码解析(2) —— 路由
  6. 欢迎光临CAX软件二次开发开源社区!
  7. asterisk的NAT配置
  8. java win10 通知,如何使用Java AWT创建和显示Windows 10通知
  9. webserver之定时器
  10. 女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决
  11. 《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView
  12. [Python] 正确复制列表的方法
  13. CakePHP中文手册【翻译】-Cake Blog创建指南
  14. K8S实战之部署java应用
  15. 用matlab做bp神经网络预测,神经网络预测matlab代码
  16. pitch yaw roll 角度分别是什么
  17. 使用curl清理Elasticsearch数据方法
  18. mapgis矢量化怎么打分数_MAPGIS矢量化步骤
  19. 程序员小灰2021年整理
  20. AT指令表(中文详解)

热门文章

  1. python 可视化界面_给大家分享一些实用的Python库
  2. go 调用其他文件函数_一文读懂Go中软件包概念
  3. Nmap经常使用的场景用法
  4. C/C++中ASCII与Unicode字符串相互转换
  5. Spring Cloud微服务实战:外卖订餐系统
  6. 算法建模流程详解及python代码实现
  7. 高斯噪声和椒盐噪声python
  8. java中的char可以存储汉字吗?
  9. spark 应用程序性能优化:12 个优化方法
  10. Spark MLlib实现的广告点击预测–Gradient-Boosted Trees