.Net序列化

.Net序列化

    • .Net序列化
      • 1.什么是序列化
      • 2.序列化的作用
      • 3..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 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 pList= (List)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 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 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 pList = DataFactory.GetProgrammers();
                //添加using System.Xml.Serialization;命名空間
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(List));//創建XML序列化器,需要指定對象的類型
                xmlSerializer.Serialize(stream, pList);
            }
            using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
            {
                XmlSerializer xmlFormat = new XmlSerializer(typeof(List));//创建XML序列化器,需要指定对象的类型
                //使用XML反序列化对象
                fStream.Position = 0;//重置流位置
                List pList = pList = (List)xmlFormat.Deserialize(fStream);

            }
        }

(4) Json序列化

  public static void JsonSerialize()
        {
            List pList = DataFactory.GetProgrammers();
            string result = JsonHelper.ObjectToString>(pList);
            List pList1 = JsonHelper.StringToObject>(result);
        }

public class JsonHelper
    {
        public static string  ObjectToString(T obj)
        {

            //添加 using System.Web.Script.Serialization;通過右鍵添加System.Web.Extensions
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return javaScriptSerializer.Serialize(obj);
        }

        public static T StringToObject(string content)
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return    javaScriptSerializer.Deserialize(content);
        }

        public static string ToJson(T obj)
        {
            //添加using Newtonsoft.Json;,通過Nuget瀏覽Json.Net添加
          return   JsonConvert.SerializeObject(obj);
        }

        public static T ToObject(string content)
        {
            return JsonConvert.DeserializeObject(content);
        }
}

你可能感兴趣的:(序列化)