序列化与反序列化Serialize&Deserialize

序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了。
比如,一个计数器,数值为2,我们可以用字符串“2”表示。
如果有个对象,叫做connter,当前值为2,那么可以序列化成“2”,反向的,也可以从“2”得到值为2的计数器实例。
这样,关机时序列化它,开机时反序列化它,每次开机都是延续的。不会都是从头开始。

序列化概念的提出和实现,可以使我们的应用程序的设置信息保存和读取更加方便。

序列化有很多好处,比如,在一台机器上产生一个实例,初始化完毕,然后可以序列化,通过网络传送到另一台机器,然后反序列化,得到对象实例,之后再执行某些业务逻辑,得到结果,再序列化,返回第一台机器,第一台机器得到对象实例,得到结果。

一、二进制序列化与反序列化

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization.Formatters.Binary;

using System.Text;

using System.Threading.Tasks;

using System.IO;



namespace Serialization

{

    [Serializable]

    public class A

    {

        public string Name { get; set; }

        public string Id { get; set; }

    }

    class Program

    {

        static void Main(string[] args)

        {

            var a=new A {Name = "mk", Id = "121"};

            var formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

            Stream stream =new FileStream("UserFileInfo.bin",FileMode.Create,FileAccess.Write,FileShare.None);

            formater.Serialize(stream ,a);

            stream.Close();





            stream = new FileStream("UserFileInfo.bin", FileMode.Open, FileAccess.Read, FileShare.Read);

            var b=(A)formater.Deserialize(stream);

            stream.Close();

            Console.WriteLine("name{0}",b.Name);

            Console.WriteLine("Id{0}",b.Id);

            Console.Read();

        }



    }

}

二、XML的序列化与反序列化

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Xml.Serialization;



namespace XMLSerialization

{

    [Serializable]

    public class A

    {

        public string Name { get; set; }

        public string Id { get; set; }

    }

    class Program

    {

        static void Main(string[] args)

        {

            var a = new A { Name = "yq", Id = "121" };

            //var formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

            //Stream stream = new FileStream("UserFileInfo.bin", FileMode.Create, FileAccess.Write, FileShare.None);

            XmlSerializer mySerializer=new XmlSerializer(typeof(A));

            Stream stream = new FileStream("UserFileInfo.xml", FileMode.Create, FileAccess.Write, FileShare.None);

            mySerializer.Serialize(stream, a);

            stream.Close();





            stream = new FileStream("UserFileInfo.xml", FileMode.Open, FileAccess.Read, FileShare.Read);

            var b = (A)mySerializer.Deserialize(stream);

            stream.Close();

            Console.WriteLine("name{0}", b.Name);

            Console.WriteLine("Id{0}", b.Id);

            Console.Read();

        }



    }

}
UserFileInfo.xml返回内容
<?xml version="1.0"?>

<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <Name>yq</Name>

  <Id>121</Id>

</A>

  



     

你可能感兴趣的:(Serialize)