首页 > 代码库 > C# 二进制、Xml、Json序列化和反序列化
C# 二进制、Xml、Json序列化和反序列化
昨天利用业余时间对比了下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 = http://www.mamicode.com/stream.ToArray();>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。