序列化与反序列化
序列化与反序列化对比
1、常用的优秀序列化使用方式
Newtonsoft.Json
//object => string JsonConvert.SerializeObject(object? value); //string => object JsonConvert.DeserializeObject(string value);
2、性能更好的序列化方式
转化为二进制
//将Object类型对象(注:必须是可序列化的对象)转换为二进制序列字符串 public static string SerializeObject(object obj) { IFormatter formatter = new BinaryFormatter(); string result = string.Empty; using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, obj); byte[] byt = new byte[stream.Length]; byt = stream.ToArray(); //result = Encoding.UTF8.GetString(byt, 0, byt.Length); result = Convert.ToBase64String(byt); stream.Flush(); } return result; } //将二进制序列字符串转换为Object类型对象 public static object DeserializeObject(string str) { IFormatter formatter = new BinaryFormatter(); //byte[] byt = Encoding.UTF8.GetBytes(str); byte[] byt = Convert.FromBase64String(str); object obj = null; using (Stream stream = new MemoryStream(byt, 0, byt.Length)) { obj = formatter.Deserialize(stream); } return obj; }
注意!!
1、使用二进制序列化必须是可序列化的对象
2、使用自创的对象或集合 必须在model上面加上 [Serializable] 特性
要让一个对象支持.Net序列化服务,用户必须为每一个关联的类加上[Serializable]特性。如果类中有些成员不适合参与序列化(比如:密码字段),可以在这些域前加上[NonSerialized]特性。
即报错(“******, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.”)的解决方法
测试对比
集合序列化和反序列化执行1000次耗费时间
说明:
1、序列化为二进制字符串明显快很多
2、优缺点
Newtonsoft.Json 方便使用 性能也还可以
二进制序列化 需要配置序列化 转为object的对象还要强转类型
参考
序列化化二进制 -- https://www.cnblogs.com/leizhui/p/11750415.html
其他序列化 -- https://www.cnblogs.com/binye/articles/9863712.html