序列化 就是 对象转换成字符串的过程
反序列化 就是 字符串转换成对象的过程
注:序列化的类和他的父类 必须支持[SerialiZable]特性
下面是我根据别人的代码稍微改成泛型的序列化方法
二进制序列化与反序列化 Binary
/*
*优点:体积小
*缺点:看不懂
*/
/// <summary>
/// 二进制序列化器
/// 根据提供的地址和文件名称 把序列化后的内容写入文件
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="t">对象集合</param>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
public static void BinarySerialize<T>(List<T> t, string FilePath, string FileName)
where T : class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
List<T> tList = t;
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
binFormat.Serialize(fStream, tList);
}
}
/// <summary>
/// 二进制反序列化器
/// 根据提供的地址和文件名称 把文件内容反序列化成对象集合
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
/// <returns>List对象集合</returns>
public static List<T> DeBinarySerialize<T>(string FilePath, string FileName)
where T : class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
List<T> t = new List<T>();
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
BinaryFormatter binFormat = new BinaryFormatter();//创建二进制序列化器
//使用二进制反序列化对象
t.Clear();//清空列表
fStream.Position = 0;//重置流位置
t = (List<T>)binFormat.Deserialize(fStream);//反序列化对象
}
return t;
}
Soap序列化与反序列化
缺点 体积大 优点 可以看懂
/// <summary>
/// Soap序列化器
/// 根据提供的地址和文件名称 把序列化后的内容写入文件
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="t">对象集合</param>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
public static void SoapSerialize<T>(List<T> t, string FilePath, string FileName)
where T : class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
List<T> tList = t;
SoapFormatter soapFormat = new SoapFormatter();//创建二进制序列化器
//soapFormat.Serialize(fStream, list);//SOAP不能序列化泛型对象
soapFormat.Serialize(fStream, tList.ToArray());
}
}
/// <summary>
/// Soap反序列化器
/// 根据提供的地址和文件名称 把文件内容反序列化成对象集合
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
/// <returns>List对象集合</returns>
public static List<T> DeSoapSerialize<T>(string FilePath, string FileName)
where T : class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
List<T> tList = new List<T>();
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
SoapFormatter soapFormat = new SoapFormatter();//创建二进制序列化器
//使用二进制反序列化对象
fStream.Position = 0;//重置流位置
tList = ((T[])soapFormat.Deserialize(fStream)).ToList();//反序列化对象
}
return tList;
}
xml序列化与反序列化
/// <summary>
/// XML序列化器
/// 根据提供的地址和文件名称 把序列化后的内容写入文件
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="t">对象集合</param>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
public static void XmlSerialize<T>(List<T> t, string FilePath, string FileName)
where T : class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
using (Stream fStream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
List<T> pList = t;
XmlSerializer xmlFormat = new XmlSerializer(typeof(List<T>));//创建XML序列化器,需要指定对象的类型
xmlFormat.Serialize(fStream, pList);
}
}
/// <summary>
/// XML反序列化器
/// 根据提供的地址和文件名称 把文件内容反序列化成对象集合
/// </summary>
/// <typeparam name="T">类</typeparam>
/// <param name="FilePath">路径</param>
/// <param name="FileName">文件名</param>
/// <returns>List对象集合</returns>
public static List<T> DeXmlSerialize<T>(string FilePath, string FileName)
where T:class,new()
{
string fileName = Path.Combine(FilePath, FileName);//文件名称与路径
List<T> tList = new List<T>();
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(List<T>));//创建XML序列化器,需要指定对象的类型
//使用XML反序列化对象
fStream.Position = 0;//重置流位置
tList = (List<T>)xmlFormat.Deserialize(fStream);
}
return tList;
}
Json序列化与反序列化
需要添加 命名空间using Newtonsoft.Json; 添加Newtonsoft.Json引用
/// <summary>
/// Json序列化
/// 传入一个对象集合 返回一个字符串
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="t">对象集合</param>
/// <returns>序列化后的字符串</returns>
public static string JsonSerialize<T>(List<T> t)
where T:class,new()
{
return JsonConvert.SerializeObject(t);
}
/// <summary>
/// Json反序列化
/// 传入一个Json字符串 返回一个对象集合
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="str">Json字符串</param>
/// <returns>对象集合</returns>
public static List<T> DeJsonSerialize<T>(string str)
where T : class,new()
{
//Object obj=JsonConvert.DeserializeObject(str);
//List<T> tList = (List<T>)obj;
return JsonConvert.DeserializeObject<List<T>>(str);
}