.Net序列化
1.什么是序列化
序列化,它又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用
2.序列化的作用
以某种存储形式使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。
3..Net支持的对象序列化
(1) 二进制序列化
public static void BinarySerialize()
{
//使用二進制序列化對象
string fileName = Path.Combine(Constant.SerializePath, "BinarySerialize.txt");//文件名稱與路徑
using (Stream fStream=new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite))
{
//需要一個Stream,這裡是直接寫入文件了
List<Programmer> programmers = DataFactory.GetProgrammers();
BinaryFormatter binaryFormatter = new BinaryFormatter();//創建一個二進制序列化器
binaryFormatter.Serialize(fStream, programmers);
}
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
//這裡需要一個Stream,這裡來源于文件
BinaryFormatter binaryFormatter = new BinaryFormatter();
fStream.Position = 0;//重置流位置
List<Programmer> pList= (List<Programmer>)binaryFormatter.Deserialize(fStream);//反序列化對象
}
}
(2) SOAP序列化
public static void SOAPSerialize()
{
//使用SOAP序列化對象
string fileName = Path.Combine(Constant.SerializePath, "SOAPSerialize.txt");
using (Stream fStream=new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite))
{
List<Programmer> pList = DataFactory.GetProgrammers();
//添加using System.Runtime.Serialization.Formatters.Soap;命名空間,通過引用右鍵添加
SoapFormatter soapFormatter = new SoapFormatter();//創建SOAP序列化器
//soapFormatter.Serialize(fStream, pList);Soap不能序列化泛型對象
soapFormatter.Serialize(fStream, pList.ToArray());
}
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
SoapFormatter soapFormatter = new SoapFormatter();
fStream.Position = 0;
List<Programmer> pList = ((Programmer[])soapFormatter.Deserialize(fStream)).ToList();
}
}
(3) XML序列化
public static void XmlSerialize()
{
//使用xml序列化對象
string fileName = Path.Combine(Constant.SerializePath, "Student.xml");
using (Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
{
List<Programmer> pList = DataFactory.GetProgrammers();
//添加using System.Xml.Serialization;命名空間
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Programmer>));//創建XML序列化器,需要指定對象的類型
xmlSerializer.Serialize(stream, pList);
}
using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(List<Programmer>));//创建XML序列化器,需要指定对象的类型
//使用XML反序列化对象
fStream.Position = 0;//重置流位置
List<Programmer> pList = pList = (List<Programmer>)xmlFormat.Deserialize(fStream);
}
}
(4) Json序列化
public static void JsonSerialize()
{
List<Programmer> pList = DataFactory.GetProgrammers();
string result = JsonHelper.ObjectToString<List<Programmer>>(pList);
List<Programmer> pList1 = JsonHelper.StringToObject<List<Programmer>>(result);
}
public class JsonHelper
{
public static string ObjectToString<T>(T obj)
{
//添加 using System.Web.Script.Serialization;通過右鍵添加System.Web.Extensions
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
return javaScriptSerializer.Serialize(obj);
}
public static T StringToObject<T>(string content)
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
return javaScriptSerializer.Deserialize<T>(content);
}
public static string ToJson<T>(T obj)
{
//添加using Newtonsoft.Json;,通過Nuget瀏覽Json.Net添加
return JsonConvert.SerializeObject(obj);
}
public static T ToObject<T>(string content)
{
return JsonConvert.DeserializeObject<T>(content);
}
}