前提条件,使用Newtonsoft.Json库
1、提供了将对象序列化成Json对象和反序列化的方法
2、将序列化后的对象压缩后返回String类型对象以及解压缩的方法
public class Serializer
{
/// <summary>
/// 序列化对象并转成String对象
/// </summary>
/// <param name="_message"></param>
/// <returns></returns>
public static string Pack(Object _message)
{
using (MemoryStream input = SerializeObjectToStream(_message))
{
input.Seek(0, SeekOrigin.Begin);
using (MemoryStream output = new MemoryStream())
{
//压缩
using (DeflateStream deflateStream = new DeflateStream(output, CompressionMode.Compress))
{
input.CopyTo(deflateStream);
deflateStream.Close();
return Convert.ToBase64String(output.ToArray());
}
}
}
}
/// <summary>
/// String转二进制流并反序列化
/// </summary>
/// <param name="_packed"></param>
/// <returns></returns>
public static T Unpack<T>(string _packed)
{
using (MemoryStream input = new MemoryStream(Convert.FromBase64String(_packed)))
{
//解压缩
using (DeflateStream deflateStream = new DeflateStream(input, CompressionMode.Decompress))
{
using (MemoryStream output = new MemoryStream())
{
deflateStream.CopyTo(output);
deflateStream.Close();
output.Seek(0, SeekOrigin.Begin);
//反序列化
T message = DeserializeObjectFromStream<T>(output);
return message;
}
}
}
}
// 对象序列化方法
public static MemoryStream SerializeObjectToStream<T>(T obj)
{
var json = JsonConvert.SerializeObject(obj);
var bytes = Encoding.UTF8.GetBytes(json);
return new MemoryStream(bytes);
}
// 对象反序列化方法
public static T DeserializeObjectFromStream<T>(Stream stream)
{
stream.Seek(0, SeekOrigin.Begin); // 重置流位置到开头
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
var json = Encoding.UTF8.GetString(bytes);
return JsonConvert.DeserializeObject<T>(json);
}
}
自己在项目中遇到的需要将对象转化成Json格式传递,所以写了一个小的工具类