序列化与反序列化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>

  



     

原文地址:https://www.cnblogs.com/iammackong/p/3255098.html