c#序列化反序列化工具(json,binary,xml)
2016-06-22 17:27
405 查看
using System; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Json; namespace weekReportPlan { public static class SerializeHelper { /// <summary> /// 将一个对象序列化为字节(byte)数组 /// </summary> /// <param name="t"></param> /// <returns></returns> public static byte[] Serialize(this object t) { MemoryStream stream = new MemoryStream(); BinaryFormatter former = new BinaryFormatter(); former.Serialize(stream, t); return stream.GetBuffer(); } /// <summary> /// 将字节(byte)数组 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="b"></param> /// <returns></returns> public static T DeserializeTo<T>(this byte[] b) { BinaryFormatter bFormatter = new BinaryFormatter(); return (T)bFormatter.Deserialize(new MemoryStream(b)); } /// <summary> /// Json序列化 /// </summary> public static string ToJsJson(this object item) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, item); StringBuilder sb = new StringBuilder(); sb.Append(Encoding.UTF8.GetString(ms.ToArray())); return sb.ToString(); } } /// <summary> /// Json反序列化 /// </summary> public static T FromJsonTo<T>(this string jsonString) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T jsonObject = (T)ser.ReadObject(ms); ms.Close(); return jsonObject; } /// <summary> /// 将一个对象序列化为字节(byte)数组并保存到指定文件路径 /// </summary> /// <param name="t"></param> /// <param name="path"></param> public static void SerializeToFile(this object t,string path) { using (FileStream fs = new FileStream(path, FileMode.Create)) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, t); } } /// <summary> /// 从指定文件路径中读取数据并反序列化为对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <returns></returns> public static T DeserializeFromFileTo<T>(string path) { T t; using (FileStream fs = new FileStream(path, FileMode.Open)) { BinaryFormatter bf = new BinaryFormatter(); t = (T)bf.Deserialize(fs); } return t; } } }
注意1:序列化为二进制的时候需要在类中添加[Serializable]特性
注意2:如果类添加了[Serializable]特性,并且属性都是自动属性时,将该类对象序列化为json的时候需要给类再添加[DataContract]特性,给类属性添加[DataMember]特性
相关文章推荐
- jsp include
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
- js 压缩并解决iphone上传头像偏转
- 在jsp页面输出字符"*"组成的金字塔
- 将目录结构输出为json格式(zTree)
- Ext JS 如何动态加载JavaScript创建窗体
- JSP
- JSON & Perl
- javascript 中继承实现方式归纳
- ExtJs数据分组(GroupingView)
- 利用js在页面上有隐藏html
- JS基本变量与异常处理
- 8种json数据查询方式
- javaScript中的this的使用
- JS中连等赋值操作使用注意事项(a=b=c)
- JavaScript跨域总结与解决办法
- JS常见事件及其对应函数
- JavaScript基于原型链的继承
- 计算5的阶乘并在Jsp页面输出
- ExtJs中XTemplate使用(转)