.NET序列化学习

来源:互联网 发布:java简历项目经验范文 编辑:程序博客网 时间:2024/05/17 09:45

**序列化:将(数据)对象转换为可存储或者可传输格式的过程。
反序列化:从物质介质或流(stream)上获取数据(对象)。
目的:将对象持久化(持久化的对象就可以实现永久的存储和值封送)。**

.NET提供2种强大的序列化技术:一种是二进制序列化,另一种是XML序列化。

System.Runtime.Serialization,用于实现二进制序列化,其中IFormatter接口提供了对象序列化的功能,BinaryFormatter和SoapFormatter分别用于将对象序列化为二进制格式和Soap格式。

  • 二进制序列化Demo:
    [Serializable]    public class UserInfo    {        public string Name;        public Int32 Age;        public bool IsVip;        public UserInfo(string name, Int32 age, bool isVip)        {            Name = name;            Age = age;            IsVip = isVip;        }    }    
    class Program    {        static void Main(string[] args)        {            BinarySerialize(new UserInfo("wq", 26, false));            var user = BinaryDeserialize();        }        static void BinarySerialize(UserInfo user)        {            var fileStream = new FileStream("MySerialize.bin", FileMode.Create);            var formatter = new BinaryFormatter();            formatter.Serialize(fileStream, user);            fileStream.Close();        }        static UserInfo BinaryDeserialize()        {            var fileStream = new FileStream("MySerialize.bin", FileMode.Open, FileAccess.Read, FileShare.Read);            var formatter = new BinaryFormatter();            var user = formatter.Deserialize(fileStream) as UserInfo;            fileStream.Close();            return user;        }    }

System.Xml.Serialization,用于实现XML序列化,其中最重要的类型为XmlSerializer类,它提供了相应的Serialize方法和Deserialize方法来完成XML格式的序列化和反序列化。(注意:1、XML序列化不能完成方法,索引器,私有字段和制度属性的序列化,而必须由二进制序列化完成。2、需要序列化的对象必须有无参数的构造函数。)

  • XML序列化Demo
    [Serializable]    public class UserInfo    {        private string Name;//该字段不会再XML中显示        public Int32 Age;        public bool IsVip;        public UserInfo(){}//必须提供无参构造器,否则XmlSerializer将出错        public UserInfo(string name, Int32 age, bool isVip)        {            Name = name;            Age = age;            IsVip = isVip;        }    }
    class Program    {        static void Main(string[] args)        {             var xmlSerializer = new XmlSerializer(typeof(UserInfo));            var streamWriter = new StreamWriter("MySerialize.txt");            xmlSerializer.Serialize(streamWriter, user);            streamWriter.Close();            var fileStream = new FileStream("MySerialize.txt", FileMode.Open);            var a = xmlSerializer.Deserialize(fileStream) as UserInfo;            fileStream.Close();        }    }

此处参考自:你必须知道的.NET(第二版) 作者:王涛

0 0
原创粉丝点击