写了个序列化反序列化助手
/// <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
写了个序列化反序列化助手相关推荐
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- 高效的序列化/反序列化数据方式 Protobuf
高效的序列化/反序列化数据方式 Protobuf github地址 目录 protocolBuffers 序列化 Int32 String Map slice 序列化小结 protocolBuffer ...
- 10.8-全栈Java笔记:序列化/反序列化的步骤和实例
本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...
- java序列化 反序列化_Java序列化– Java序列化
java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...
- Openssl ECC椭圆曲线算法 - 密钥/签名/验签/加密/解密/SM2密文 - 序列化反序列化导出导入 - C源码
. . . . 废话不多说,本代码继承自另外一位讲解Openssl ECC椭圆曲线算法大佬的源代码:https://blog.csdn.net/scuyxi/article/details/59182 ...
- avro数据序列化/反序列化
序列化:把数据加工成特定的格式 反序列化:把特定格式的数据解析成对象 Avro提供了两种序列化和反序列化的方式:一种是通过Schema文件来生成代码的方式,一种是不生成代码的通用方式,这两种方式都需要 ...
- 什么是序列化?反序列化? 场景使用? 怎么实现???
今天煌sir来带你扫扫盲, 关于什么是序列化?反序列化? 场景使用? 怎么实现??? 或许我们平时大概知道, 嗯,序列化,就是实现 Serializable 接口, 那再问你,怎么实现的, 或许你就 ...
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网 ...
- Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释
今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...
最新文章
- python close函数_Matplotlib的close()函数使Tkinter GUI窗口关闭
- java中注解的使用_java中注解的使用
- UA MATH571B 试验设计 2k析因设计理论上
- 子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...
- Spring Cloud Gateway 源码解析(2) —— 路由
- 欢迎光临CAX软件二次开发开源社区!
- asterisk的NAT配置
- java win10 通知,如何使用Java AWT创建和显示Windows 10通知
- webserver之定时器
- 女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决
- 《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView
- [Python] 正确复制列表的方法
- CakePHP中文手册【翻译】-Cake Blog创建指南
- K8S实战之部署java应用
- 用matlab做bp神经网络预测,神经网络预测matlab代码
- pitch yaw roll 角度分别是什么
- 使用curl清理Elasticsearch数据方法
- mapgis矢量化怎么打分数_MAPGIS矢量化步骤
- 程序员小灰2021年整理
- AT指令表(中文详解)