C# 二进制、Xml、Json序列化和反序列化
2014-05-28 14:33
585 查看
昨天利用业余时间对比了下C#中三种序列化方式(二进制、Xml、Json),综合来看json方式生成的字节数组长度最短,但当你需要序列化的对象中包括byte[]类型,且其长度较长时,序列化后,xml方式的长度较json方式更短。xml方式中对byte[]做了base64转换。
最后综合三种情况,写了一个基于泛型的通用类来完成序列化和反序列化操作,仅供参考,若有什么错误之处,还请指教。
最后综合三种情况,写了一个基于泛型的通用类来完成序列化和反序列化操作,仅供参考,若有什么错误之处,还请指教。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Runtime.Serialization.Json; using System.Xml.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace Leaf.Lib.Data { /// <summary> /// 对象序列化/反序列化 /// </summary> public class Serialization { /// <summary> /// 序列化类型 /// </summary> public enum SerializeType { Binary, Json, Xml } /// <summary> /// 对象反序列化 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="aSerializeData">序列化字节数组</param> /// <param name="aType">序列化方式</param> /// <returns></returns> public static T Deserialize<T>(byte[] aSerializeData, SerializeType aType) { T obj = default(T); ; if (aSerializeData != null && aSerializeData.Length > 0) { MemoryStream stream = new MemoryStream(aSerializeData); switch (aType) { case SerializeType.Binary: BinaryFormatter bf = new BinaryFormatter(); obj = (T)bf.Deserialize(stream); break; case SerializeType.Json: DataContractJsonSerializer djs = new DataContractJsonSerializer(typeof(T)); obj = (T)djs.ReadObject(stream); break; case SerializeType.Xml: XmlSerializer xs = new XmlSerializer(typeof(T)); obj = (T)xs.Deserialize(stream); break; } stream.Close(); } return obj; } /// <summary> /// 对象序列化 /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="aData">需要序列化的对象</param> /// <param name="aType">序列化方式</param> /// <returns></returns> public static byte[] Serialize<T>(T aData, SerializeType aType) { MemoryStream stream = new MemoryStream(); switch (aType) { case SerializeType.Binary: BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, aData); break; case SerializeType.Json: DataContractJsonSerializer djs = new DataContractJsonSerializer(typeof(T)); djs.WriteObject(stream, aData); break; case SerializeType.Xml: XmlSerializer xs = new XmlSerializer(typeof(T)); xs.Serialize(stream, aData); break; } byte[] data = stream.ToArray(); stream.Close(); return data; } } }
相关文章推荐
- C#.NET序列化XML、JSON、二进制微软自带DLL与newtonsoft(json.net)
- c#中的Json的序列化和反序列化
- C# 对象的xml序列化和反序列化
- C#中的Json的序列化和反序列化
- C# 對象到XML的序列化和反序列化
- XML/JSON序列化和反序列化
- c#.net将对象序列化,反序列化json
- C# XML 的序列化和反序列化
- .net C# XML / Binary 序列化反序列化代码示例
- C# XML 的序列化和反序列化
- C# 使用JSON对数据序列化和反序列化.
- C#中,将XML源文件序列化和反序列化的问题
- 类对象序列化(反序列化)成xml文件或者二进制文件到本地文件方法
- c# 读取json 写json 序列化与反序列化 .net 4.0
- Java Json/xml 序列化和反序列化 工具:JsonTools 和 simpleframework 附带实例
- C#对JSON的序列化和反序列化
- C#中XML序列化和反序列化初探
- C#中的Json的序列化和反序列化
- C#对 Json的序列化和反序列化会出现“k_BackingField”
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对象与xml文件的相互转换等等。)