序列化与反序列化
序列化与反序列化对比
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
浙公网安备 33010602011771号